Есть ли Perl-эквивалент Python `if __name__ == '__main __'`? - PullRequest
29 голосов
/ 01 апреля 2009

Есть ли способ определить, выполняется ли текущий файл в Perl-источнике? В Python мы делаем это с помощью следующей конструкции:

if __name__ == '__main__':
    # This file is being executed.
    raise NotImplementedError

Я могу взломать что-нибудь вместе, используя FindBin и __FILE__, но я надеюсь, что есть канонический способ сделать это. Спасибо!

Ответы [ 3 ]

45 голосов
/ 01 апреля 2009
unless (caller) {
  print "This is the script being executed\n";
}

См. Звонящий . Возвращает undef в основном скрипте. Обратите внимание, что это не работает внутри подпрограммы, только в коде верхнего уровня.

10 голосов
/ 01 апреля 2009
3 голосов
/ 02 апреля 2009

unless caller хорошо, но более прямая параллель, а также более явная проверка , это:

use English qw<$PROGRAM_NAME>;

if ( $PROGRAM_NAME eq __FILE__ ) { 
    ...
}

Просто подумал, что я поставлю это там.

РЕДАКТИРОВАТЬ

Имейте в виду, что $PROGRAM_NAME (или '$0') доступно для записи, так что это не является абсолютным. Но в большинстве случаев - за исключением аварийных или неистовых модулей - это, скорее всего, не изменится, или будет изменено не более локально в другой области.

...