2014-03-29 150 views
0

我正在通过Perl的一些开始的例子。为什么这个Perl代码不会产生一个换行

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

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

+0

是啊,我正要次编辑e代码,无论如何。 – esh

回答

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,使用的括号迫使某些优先权:(6 < 7 and 7 > 2)

    • parens也用于参数l在函数调用中。如果你不希望这个解释,把+的括号前:

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

      相同

      print(((3 + 2)/5), "\n"); 
      
    • 使用say函数而不是print,为say自动附加一个换行符:

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

    你也可以添加使用'strict'和'warnings'的OP可以得到有用的提示......(我只是认为最好是在这里而不是增加另一个答案) – Matteo

    +0

    哦,这就是你如何使用功能'say'。 – esh

    +0

    或者'使用v5.10;'(比如说say的文档)。 – ikegami

    相关问题