几年前,除了最简单的Perl脚本之外,我已经为所有人采用了以下“模式”:(我甚至不记得我先看到它的位置,这当然不是我真正的想法。)
use strict;
...
sub main {
...
}
... possibly more subs ...
... at the end of the file:
#############
# Call main #
&main();
#############
这有什么好处吗?我发现代码有点干净,但除此之外我不确定这有什么目的让我的C程序员开心: - )
来自Perl专家和高级用户的任何见解表示赞赏。 (我当然不是)
答案 0 :(得分:11)
限制范围是一种已知的习惯用语。这在https://stackoverflow.com/q/1183876#comment-1012787 ff中讨论。和http://use.perl.org/comments.pl?sid=43991&cid=70918 ff。
答案 1 :(得分:7)
它提供了一个避免在subs中意外使用错误变量的范围。 { ... }
也可以这样做,但是使用sub可以将主代码放在文件的顶部,同时仍然在文件中执行其他初始化代码。
就个人而言,我已经习惯了
{
... # Extract command line switches from @ARGV
... # Perform input validation
exit(main(@ARGV));
}
答案 2 :(得分:5)
效益?不,除非您需要重新使用主要子。在某些情况下,它可能会降低可读性,但我对此表示怀疑。
有一点不同的是命令,例如:
my $arg = shift;
会影响@_
而不是@ARGV
,而@ARGV
不会自动传递给main()
。 @ARGV
仍会在子内可见,但您必须明确移动它shift @ARGV
。
答案 3 :(得分:3)
一个优势可能是它可以让您更轻松地将程序转换为modulino。
答案 4 :(得分:1)
做了很多Perl我会说这只是让你开心的事情。我怀疑它是更快还是更慢。
为了使我的回答有点有用,我会指出你的子调用不需要&
。 &
使@_
对子可见,但空的parens否定了这一点。