Perl并没有抱怨丢失分号

时间:2013-05-09 09:08:50

标签: perl semantics

我刚刚在我的Ubuntu上发现Perl并没有抱怨最后的分号。请检查以下代码:

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

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

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

print "no, this cant be true"

请注意分号“;” print语句中缺少。代码运行良好。

输出:

1
2
3
4
no, this cant be true

如果我在打印后加分号,它仍然有效。所以这让我感到困惑。

你能帮助我理解我在这里缺少什么,还是有一些我忽略的明显的Perl意识形态?

3 个答案:

答案 0 :(得分:50)

来自perldoc perlsyn

  

每个简单语句必须以分号结束,除非它是块中的最后一个语句,在这种情况下分号是可选的。

您的print语句是块中的最后一个语句。

不建议省略分号。如果稍后扩展块,就很容易忘记添加它。

答案 1 :(得分:12)

我经常认为Perl中的分号是分​​隔符而不是终结符 - 这使得这种行为更容易习惯。

也就是说,总是使用分号并不是一个坏主意,因为如果在块的末尾添加更多语句,就不必记得稍后添加它,有点像使用额外的逗号一个列表,以便您不要忘记稍后添加(如果后面没有列表项,Perl会忽略最后一个逗号)。

答案 2 :(得分:9)

来自Perl documentation

  

每个简单的声明必须以分号结束,除非它   是一个块中的最后一个语句,在这种情况下分号是   可选的。