为什么Perl中的'last'被称为'last'?
-
06-07-2019 - |
题
在C中调用 last
在Perl而不是 break
中调用的历史原因是什么?
Perl的设计受C的影响(除了awk,sed和sh - 请参阅下面的man page),因此必须有一些推理背后不能使用熟悉的C-style命名break / last。 / p>
Perl 1.000(1987年12月18日发布)手册的一些历史:
[Perl]结合(在作者看来,无论如何)C,sed,awk和sh的一些最佳功能,所以熟悉这些语言的人应该没有什么困难。 (语言历史学家也会注意到一些csh,Pascal,甚至是BASIC | PLUS的痕迹。)
其他提示
我希望这是因为Perl是由语言学家而不是计算机科学家创建的。在正常的英语用法中,声明你已完成最后一遍循环的概念与单词“last”更强烈地联系在一起。 (“这是最后传递”)而不是单词“break”。 (“打破循环”?“打破离开循环”? - 甚至不清楚“break”是如何与退出循环相关的)
当你记得你可以使用它而不仅仅是直接循环控制时,术语'last'更有意义。您可以将其应用于上面一个或多个级别的标记块 它所在的区块:
LINE: while( <> ) {
WORD: foreach ( split ) {
last LINE if /^__END__\z/;
...
}
}
更自然地说“最后”当你把它读成“最后一行,如果它匹配......”时,用英文写的。
Theres是您可能需要考虑的另一个原因:
最后不仅仅是循环控制。
sub hello {
my ( $arg ) = @_;
scope: {
foo();
bar();
last if $arg > 4;
baz();
quux();
}
}
最后,因为这是一般的流量控制机制,不限于循环。当然,你可以将上面概括为一个最多运行1次的循环,但是没有循环表示“Break”?我们打破了什么?“
相反,我想到了“ last
” as“跳转到 last 大括号”的位置,这是为了这个目的,在语义上更合理。
我向Damian Conway问了一个关于 say
的问题。 Perl 6将引入 say
,它只不过是自动添加换行符的 print
。我的问题是为什么不简单地使用 echo
,因为这就是 echo
在Bash(以及可能在其他地方)所做的事情。
他的回答是: echo
比说
长33%。
他有一点意见。 :)
因为它进入循环的最后一个。而且因为拉里沃尔是个怪人。