kno*_*orv 12 syntax perl language-features language-design
什么是历史原因给last被称为是在Perl,而不是break因为它是所谓的C 2
Perl的设计受C的影响(除了awk,sed和sh - 参见下面的man page),因此必须有一些推理背后不能使用熟悉的C风格的break/last命名.
Perl 1.000(1987年12月18日发布)手册页的一些历史:
[Perl]结合(在作者看来,无论如何)C,sed,awk和sh的一些最佳功能,所以熟悉这些语言的人应该没有什么困难.(语言历史学家也会注意到一些csh,Pascal,甚至是BASIC | PLUS的痕迹.)
小智 33
'break'或'last'的语义由语言(在本例中为Perl)定义,而不是由您定义.
为什么不将'last'视为"这是为循环运行的最后一个语句".
我总是觉得奇怪的是'C'中的'continue'语句开始循环的下一遍.这绝对是"继续"概念的奇怪用法.但它是'C'的语义,所以我接受它.
通过尝试将特定的编程概念映射到具有现有含义的单个英语单词,总会出现某种不匹配的奇怪现象
另外,拉里沃尔有点奇怪.你见过他的照片吗?
Larry Wall http://www.wired.com/images/article/full/2007/12/larry_wall_250px.jpg
Dav*_*man 17
我希望这是因为Perl是由语言学家创建的,而不是计算机科学家.在正常的英语用法中,声明你已完成最后一遍循环的概念与单词"last"("这是最后一遍")的关系比"break" 这个词更强烈(" 打破循环" "?" 突破循环"? - 甚至不清楚"破解"是指与退出循环有关.
bri*_*foy 14
当你记得你可以使用它而不仅仅是直接循环控制时,术语'last'更有意义.您可以将它应用于标记块上面的块上方的一个或多个级别:
LINE: while( <> ) {
WORD: foreach ( split ) {
last LINE if /^__END__\z/;
...
}
}
Run Code Online (Sandbox Code Playgroud)
当你把它读作"如果它匹配的最后一行......"时,它会更自然地用英语说"最后".
Ken*_*ric 10
您还可以考虑另外一个原因:
最后不仅仅是循环控制.
sub hello {
my ( $arg ) = @_;
scope: {
foo();
bar();
last if $arg > 4;
baz();
quux();
}
}
Run Code Online (Sandbox Code Playgroud)
最后,因为一般的流量控制机制不限于循环.当然,你可以将上面的内容概括为一个最多运行1次的循环,但是对我来说没有循环表示"Break?我们有什么突破?"
相反,我认为" last"跳到" 最后一个支架的位置",这是为了这个目的,在语义上更合理.
我向Damian Conway问了同样的问题say.Perl 6将介绍say,这不过print是自动添加换行符.我的问题是为什么不简单地使用echo,因为这是echo在Bash(可能在其他地方)做的事情.
他的答案是:比他echo长33%say.
他有一点意见.:)
因为它进入循环的最后一个.因为拉里沃尔是个怪人.