Какая польза от подхода" sub main ... &main (); " (sub-main-pattern) в Perl?

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

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

есть ли какая-либо польза от этого? Я нахожу код немного чище, но в остальном я не уверен, что у этого есть какая-то другая цель, чтобы сделать программиста C во мне счастливым: -)

любые идеи от экспертов Perl и опытных пользователей оценили. (Я, конечно, ни)

5 ответов


Это известная идиома для ограничения области. Это обсуждается в 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.


одним из преимуществ может быть то, что это облегчает превращение вашей программы в modulino.


сделав много Perl, я бы сказал, что это просто то, что делает вас счастливыми. Сомневаюсь, что он быстрее или медленнее.

просто чтобы сделать мой ответ несколько полезным, я укажу, что вам не нужно & по вашему вызову sub. & делает @_ видимый суб, но пустые parens отрицает это.