"sub main ...&main();"有什么好处?Perl中的方法(子主模式)?

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.


ike*_*ami 7

它提供了一个范围,以避免在subs中意外使用错误的变量.{ ... }也可以这样做,但是使用sub允许主代码放在文件的顶部,同时仍然在文件中执行其他初始化代码.

就个人而言,我已经习惯了

{
   ...  # Extract command line switches from @ARGV
   ...  # Perform input validation
   exit(main(@ARGV));
}
Run Code Online (Sandbox Code Playgroud)


TLP*_*TLP 5

效益?不,除非您需要重新使用主要子.在某些情况下,它可能会降低可读性,但我对此表示怀疑.

有一点不同的是命令,例如:

my $arg = shift;
Run Code Online (Sandbox Code Playgroud)

将影响@_而不是@ARGV,并且@ARGV不会自动传递给main().@ARGV在sub中仍然可以看到,但你必须明确地移动它shift @ARGV.

  • 它是全局的,所以它可以在任何地方工作,我的意思是它不作为参数传递给`main()`.但也许这是无关紧要的.;)如果它被传递,sub中的`shift`将具有相同的功能,因为它会间接地转移`@ ARGV` (3认同)
  • 有很多关于perl的小技巧.几周前,当我发现SO时,我以为我知道的很多.原来我没有,我每天都学到新东西. (2认同)