Perl script можно использовать как программу и как модуль

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

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

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

Ответ 1

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

Основная рабочая часть modulino выглядит так (из ответа SO, связанного ниже):

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

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

"Модули как программы" из раздела "Освоение Perl" от brian d foy

"Сценарии как модули" в статье доктора Доббса

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

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