Mar*_* Ba 17 perl program-entry-point
几年前,除了最简单的Perl脚本之外,我采用了以下"模式":(我甚至不记得我先看到它的位置,这当然不是我真正的想法.)
use strict;
...
sub main {
...
}
... possibly more subs ...
... at the end of the file:
#############
# Call main #
&main();
#############
Run Code Online (Sandbox Code Playgroud)
这有什么好处吗?我发现代码有点干净,但除此之外我不确定这有什么目的让我的C程序员开心:-)
来自Perl专家和高级用户的任何见解表示赞赏.(我当然不是)
dax*_*xim 12
限制范围是一种已知的习惯用语.这在/sf/ask/82871351/#comment-1012787 ff中讨论.和http://use.perl.org/comments.pl?sid=43991&cid=70918 ff.
它提供了一个范围,以避免在subs中意外使用错误的变量.{ ... }也可以这样做,但是使用sub允许主代码放在文件的顶部,同时仍然在文件中执行其他初始化代码.
就个人而言,我已经习惯了
{
... # Extract command line switches from @ARGV
... # Perform input validation
exit(main(@ARGV));
}
Run Code Online (Sandbox Code Playgroud)
效益?不,除非您需要重新使用主要子.在某些情况下,它可能会降低可读性,但我对此表示怀疑.
有一点不同的是命令,例如:
my $arg = shift;
Run Code Online (Sandbox Code Playgroud)
将影响@_而不是@ARGV,并且@ARGV不会自动传递给main().@ARGV在sub中仍然可以看到,但你必须明确地移动它shift @ARGV.