2013-05-09 114 views
20

我剛剛在我的Ubuntu上發現Perl不會抱怨最後的分號。請檢查以下代碼:Perl不會抱怨丟失分號

#!/usr/bin/perl 
use warnings; 
use strict; 

my @array = (1, 2, 3, 4); 

foreach (@array) 
{ 
    print $_."\n" 
} 

print "no, this cant be true" 

請注意,分號「;」從打印語句中缺少。代碼運行良好。

OUTPUT:

1 
2 
3 
4 
no, this cant be true 

如果我把分號打印後,它仍然有效。所以這讓我感到困惑。

你能幫我理解我在這裏錯過了什麼,或者是否有一些我忽略的明顯的Perl意識形態?

+0

它不抱怨「額外」分號。 「額外」和「缺少」逗號也一樣。 – ikegami 2013-05-09 09:31:35

+2

從檔案中:[只有在忘記分號時才運行的程序](http://stackoverflow.com/q/11695110/168657) – mob 2013-05-09 14:51:44

+0

這實際上在單行eval塊中非常方便。考慮說「eval {$ some-> method};」詩句說「eval {$ some-> method;};」。 – 2013-10-17 13:37:00

回答

45

perldoc perlsyn

每一個簡單的語句必須以分號結束,除非它是一個塊,在這種情況下分號是可選的最後陳述。

您的打印語句是塊中的最後一個語句。

雖然不推薦省略分號。如果稍後擴展該塊,則很容易忘記添加它。

9

Perl documentation

每一個簡單的語句必須以分號結束,除非它 是在一個塊中的最後陳述,在這種情況下,分號是 可選。

12

我經常把Perl中的分號看作分隔符而不是終止符 - 這使得這種行爲更容易習慣。

也就是說,總是使用分號並不是一個壞主意,因爲如果在塊的末尾放置更多語句,您不必記住稍後添加分號,有點像使用額外逗號在列表中,以便您不要忘記稍後添加它(如果在它之後沒有列表項,Perl會忽略最後的逗號)。