Perl并没有抱怨丢失分号

sla*_*fer 26 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"
Run Code Online (Sandbox Code Playgroud)

请注意分号";" print语句中缺少.代码运行良好.

OUTPUT:

1
2
3
4
no, this cant be true
Run Code Online (Sandbox Code Playgroud)

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

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

Que*_*tin 51

来自perldoc perlsyn:

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

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

不推荐省略分号.如果稍后扩展块,很容易忘记添加它.


Mat*_*ton 12

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

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


And*_*mar 9

Perl文档:

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