Существует ли Perl эквивалент Python `if __name__ == '__main __'`?

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

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

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

Ответ 1

unless (caller) {
  print "This is the script being executed\n";
}

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

Ответ 3

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

use English qw<$PROGRAM_NAME>;

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

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

EDIT

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