关于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个也根本没打印
答案 0 :(得分:5)
始终使用严格的警告信息;他们指出您的问题。
对于“每个不包含数字值的字符串”,这都是模糊的,但是正确的。如果在忽略前导空格后字符串的开头有一个数字,则该值为该值。所以0+“ 123abc”是123。
但是“数字”包括/inf|nan/i
。所以0+“纳米技术”就是NaN。
另一个惊喜是按位运算符~ & | ^
具有字符串模式;如果两个操作数都不是数字,或者未在数字上下文中使用过,则它们将对字符串的位进行运算并返回字符串,而不是转换为数字值。
++
还有一个字符串模式:++($x="abc")
是“ abd”。
答案 1 :(得分:4)
打开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;
答案 2 :(得分:1)
您已使用参数print
调用了"barney " x 4
,并在结果中添加了一个。
括号中
print("barney " x 4) + 1
与大多数其他语言一样,分隔参数列表