几年前,除了最简单的Perl脚本外,我对所有脚本都采用了以下"模式":(我甚至不记得我第一次看到它的地方,这当然不是我的真正想法。)
use strict;
...
sub main {
...
}
... possibly more subs ...
... at the end of the file:
#############
# Call main #
&main();
#############
这有什么好处吗?我发现代码有点干净,但除此之外,我不确定这是否有任何目的,使我的C程序员高兴:-)
欢迎来自Perl专家和高级用户的见解。(我肯定两者都不是)
限制作用域是众所周知的习惯用法。这在https://stackoverflow.com/q/1183876#comment-1012787 ff中有讨论。和http://use.perl.org/comments.pl?sid=43991&cid=70918 ff.
它提供了一个作用域,以避免在子节点中意外使用错误的变量。{ ... }
也会这样做,但是使用sub允许将主代码放在文件的顶部,同时仍然执行文件中的其他初始化代码。
我个人用过
{
... # Extract command line switches from @ARGV
... # Perform input validation
exit(main(@ARGV));
}
效益?不,除非你需要重用主子。在某些情况下,它可能会降低可读性,但我对此表示怀疑。
有一点是不同的,例如:my $arg = shift;
将影响@_
而不是@ARGV
,并且@ARGV
不会自动传递给main()
。@ARGV
在子目录中仍然是可见的,但是你必须显式地把它改成shift @ARGV
。
一个优点可能是它使您的程序更容易变成模。
在使用了大量Perl之后,我想说这只是让您感到高兴的事情。我怀疑它会更快或更慢。
只是为了使我的回答有些用处,我要指出你在潜艇呼叫中不需要&
。&
使@_
对子节点可见,但空父节点否定了这一点。