Perl 不会抱怨缺少分号

Posted

技术标签:

【中文标题】Perl 不会抱怨缺少分号【英文标题】:Perl does not complain about missing semicolon 【发布时间】:2013-05-03 17:13:12 【问题描述】:

我刚刚在我的 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"

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

输出:

1
2
3
4
no, this cant be true

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

您能否帮助我了解我在这里遗漏了什么,或者是否有一些明显的 Perl 意识形态被我忽略了?

【问题讨论】:

它也不会抱怨“额外的”分号。 “额外”和“缺失”逗号也是如此。 来自档案:a program that only runs when you forget the semi-colon 这在单行 eval 块中实际上非常方便。考虑说“eval $some->method;”诗句说“eval $some->method;;”。 【参考方案1】:

来自perldoc perlsyn:

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

您的打印语句是块中的最后一条语句。

但不建议省略分号。以后扩展块太容易忘记添加了。

【讨论】:

确实,它就像 Pascal,而不是 C。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

来自Perl documentation:

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

【讨论】:

以上是关于Perl 不会抱怨缺少分号的主要内容,如果未能解决你的问题,请参考以下文章

如何让 VScode 自动修复缺少的分号 Apex?

Caret train 方法抱怨出问题了;缺少所有 RMSE 度量值

React componentDidMount“解析错误:缺少分号”

Django测试抱怨缺少表问题,怎么解决

更新语句使 Datagrip 抱怨缺少 WHERE 子句

我的测试中缺少伊斯坦布尔抱怨缺少分支覆盖的确切缺点?