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

时间:2011-07-20 15:00:42

标签: perl main

几年前,除了最简单的Perl脚本之外,我已经为所有人采用了以下“模式”:(我甚至不记得我先看到它的位置,这当然不是我真正的想法。)

use strict;
...
sub main {
  ...
}
... possibly more subs ...

... at the end of the file:
#############
# Call main #
&main();
#############

这有什么好处吗?我发现代码有点干净,但除此之外我不确定这有什么目的让我的C程序员开心: - )

来自Perl专家和高级用户的任何见解表示赞赏。 (我当然不是)

5 个答案:

答案 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否定了这一点。