Perl-скрипт, используемый в качестве программы и модуля - PullRequest
5 голосов
/ 03 августа 2010

У меня есть Perl-скрипт (отдельная программа), который содержит некоторые подпрограммы, которые я хотел бы использовать в других скриптах.Из-за ограничений среды выполнения я не могу переместить функции в общий файл .pm.

Можно ли определить, был ли скрипт запущен как отдельная программа или он был require ed?/ do ed другим скриптом?

Единственное, что я смог найти, это использовать caller на верхнем уровне: автономная программа не имеет вызывающего абонента, когда require ed caller показываеткто загрузил модуль.Есть ли лучшее решение?

1 Ответ

9 голосов
/ 03 августа 2010

Да, ваш caller подход был верным - это метод, названный "modulinos" Брайаном Д Фой . Я предполагаю, что Брайан изобрел это, если кто-то не просветит меня до противоположности.

Основная рабочая часть модуля выглядит следующим образом (из приведенного ниже ответа SO):

__PACKAGE__->run( @ARGV ) unless caller;
sub run {
    my( $class, @args ) = @_;
}
1;

Вот несколько ссылок:

Глава «Модули как программы» из книги «Освоение Perl» Брайана Д. Фоя

Статья "Скрипты как модули" в Dr. Dobbs

Статья "Как скрипт становится модулем" на perlmonks

Что я должен добавить в свой стартовый шаблон для моих программ на Perl?

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