2014-03-29 202 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

    相關問題