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 不会抱怨缺少分号的主要内容,如果未能解决你的问题,请参考以下文章
Caret train 方法抱怨出问题了;缺少所有 RMSE 度量值