为什么这个perl代码不会产生换行符

时间:2014-03-29 11:06:11

标签: perl newline

我正在研究Perl的一些初级示例。

print "\n6 less than 7 and 7 greater than 2 : ", 6 < 7 and 7 > 2, "\n";    
print ((3 + 2)/5), "\n";

最后的换行没有发生。为什么呢?

1 个答案:

答案 0 :(得分:7)

这是运营商优先权的问题。 and的优先级非常低,通常只能用于控制流程。 Perl会像这样解析你的代码:

(print "\n6 greater than 7 and 7 greater than 2 : ", 6 < 7) and (7 > 2, "\n");    
(print +(3 + 2)/5), "\n";

解决方案:

    当您打算使用布尔运算符时,
  • 使用&&而不是and

  • 或者,使用parens强制某些优先权:(6 < 7 and 7 > 2)

  • parens也用于函数调用中的参数列表。如果您不想要这种解释,请在parens之前加+

    print +((3 + 2)/5), "\n";
    

    相同
    print( ((3 + 2)/5), "\n" );
    
  • 使用say函数代替print,因为say会自动附加换行符:

    use feature 'say';
    say +(3 + 2)/5;