Ответ 1
unless (caller) {
print "This is the script being executed\n";
}
См. caller. Он возвращает undef
в главном script. Обратите внимание, что это не работает внутри подпрограммы только в коде верхнего уровня.
Есть ли способ определить, является ли текущий файл тем, который выполняется в Perl-источнике? В Python мы делаем это со следующей конструкцией:
if __name__ == '__main__':
# This file is being executed.
raise NotImplementedError
Я могу что-то взломать, используя FindBin
и __FILE__
, но я надеюсь на канонический способ сделать это. Спасибо!
unless (caller) {
print "This is the script being executed\n";
}
См. caller. Он возвращает undef
в главном script. Обратите внимание, что это не работает внутри подпрограммы только в коде верхнего уровня.
См. раздел "Подклассы для приложений (глава 18)" brian d foy статья Пять способов улучшить ваше программирование на Perl.
unless caller
хорош, но более прямая параллель, а также более явная проверка:
use English qw<$PROGRAM_NAME>;
if ( $PROGRAM_NAME eq __FILE__ ) {
...
}
Просто подумал, что я поместил это там.
EDIT
Имейте в виду, что $PROGRAM_NAME
(или '$0
') доступен для записи, поэтому это не является абсолютным. Но в большинстве случаев - за исключением случаев аварии или взрывающихся модулей - это, вероятно, не будет изменено или изменено не более локально в пределах другой сфера.