2013-05-09 77 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会忽略最后的逗号)。