【问题标题】:Perl string conversionPerl 字符串转换
【发布时间】:2018-06-20 15:39:18
【问题描述】:

关于 Perl 5 的简单问题。

据我在阅读 perl 中字符串转换的第一章时所了解的,每个不包含数值运算中使用的数值的字符串都会自动转换为零值。

就像测试一样,我使用了以下打印语句:

print 1 + ("barney " x 4);
print "\n";
print "barney " x 4 + 1;
print "\n";
print ("barney " x 4) + 1;

由此,我希望始终接收数字 1 作为输出,因为字符串重复运算符的优先级高于求和运算符,但输出如下:

1
1
barney barney barney barney 

为什么最后一个打印语句不再打印 1,而只打印了四次“barney”?最后的 1 也根本不打印

【问题讨论】:

  • 您已经使用参数"barney " x 4 调用了print,并在结果中添加了一个。 print("barney " x 4) + 1
  • 只是为了确定:您知道x 是重复运算符,而* 是乘法?
  • 是的,知道。

标签: perl


【解决方案1】:

始终使用严格和警告;他们指出了你的问题。

关于“每个不包含数值的字符串”,这是模糊但真实的。如果忽略前导空格后字符串的开头有一个数字,那将是该值。所以 0+" 123abc" 是 123。

但“数字”包括/inf|nan/i。所以0+“纳米技术”就是NaN。

另一个惊喜是位运算符~ & | ^ 具有字符串模式;如果两个操作数都不是数字或已在数字上下文中使用,它们将对字符串的位进行操作并返回一个字符串,而不是转换为数值。

++也有字符串模式:++($x="abc")是“abd”。

【讨论】:

    【解决方案2】:

    打开warnings获取更多信息:

    print (...) interpreted as function at -e line 1.
    Useless use of addition (+) in void context at -e line 1.
    

    最后一个表达式被解释为

    (print ("barney " x 4)) + 1;
    

    【讨论】:

      【解决方案3】:

      您使用参数"barney " x 4 调用了print,并在结果中添加了一个。

      括号内

      print("barney " x 4) + 1
      

      分隔参数列表,就像大多数其他语言一样

      【讨论】:

        猜你喜欢
        • 2021-05-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 2017-01-17
        • 1970-01-01
        • 1970-01-01
        • 2014-07-07
        相关资源
        最近更新 更多