为什么'print(52-80)* 42'与Perl中的'print 42 *(52-80)'不同?

时间:2010-09-27 17:41:19

标签: perl operators printing math

3 个答案:

答案 0 :(得分:24)

答案 1 :(得分:17)

Alex Howansky的警告意味着

print (52-80)*42 , "\n"

被解析为

(print(52-80)) * 42, "\n"

也就是说,包含(1)42次函数print(-28)的结果的列表,以及(2)包含换行符的字符串。 (1)的副作用是将值-28(没有换行符)打印到标准输出。

如果您需要打印以括号开头的表达式,则解决方法是在其前面添加+

print +(52-80)*42, "\n"         #  ==> -1176

答案 2 :(得分:6)

感谢Perl古怪的解析规则(哦,Perl,你好!),这些陈述:

print ((52-80)*42) , "\n";
print (52-80)*42 , "\n";

被解释为好像是他们写的:

(print ((52-80)*42)), "\n";
(print (52-80))*42, "\n";

这就是为什么你最终在一行上看到-1176-28,并且缺少预期的空行。 Perl看到(print-expr), "\n";并简单地抛弃换行而不是打印它。