Perl: «Установить» пользовательский модуль из локального файла .pm в среду выполнения Perl?

Здесь новичок в Perl, у которого очень мало времени и поддержки для изучения Perl, но все ожидания от руководства использовать его как Perl Pro :)

Я использую Perl (v5.30.2 Ларри Уолла) под Cygwin (Windows 10)

Мой разработчик выпустил новый скрипт, который теперь использует модуль Perl, которого у меня не было.
Затем они прислали мне файл .pm (который они создали сами, и его нет ни в одном онлайн-репозитории Perl).

Мне не удалось использовать CPAN для установки этого файла в мою среду выполнения Perl.

  1. Где должен быть сохранен файл .pm? (пожалуйста, укажите точную папку)
  2. Как сказать CPAN установить этот файл для использования? В идеале разовое дело, так как я не хочу забывать об установке этого файла, если мне придется делать это каждый раз, когда мне нужно запустить Perl-скрипт...
  • На всякий случай у уважаемых ответчиков могут быть какие-либо проблемы с безопасностью: здесь нет никаких проблем с безопасностью, все это в среде, не имеющей подключения к Интернету.

1 ответ

Модуль Perl — это просто файл (или набор файлов). Вам не нужно размещать их в каком-то особом месте, но вам нужно указать Perl, где их найти.

Когда вы звоните useили requireс голым словом, Perl переводит это имя модуля, например Some::Module, в Some/Module.pm (или что-то другое, подходящее для вашей системы. Кто-нибудь все еще использует VMS?).

Получив форму имени файла модуля, он ищет этот подпуть в каталогах в @INC. Он пробует первый каталог. Если не находит, переходит к следующему и так далее по цепочке. Эти каталоги выбираются, когда кто-то настраивает и устанавливает Perl. А до v5.26 он включал текущий рабочий каталог (см. v5.26 удаляет точку из @INC и не включает ли Perl текущий каталог в @INC по умолчанию? )

Но вы можете указать Perl, где еще искать. perlfaq8 имеет Как добавить каталог в мой путь включения (@INC) во время выполнения?. Икегами тоже показал FindBinв комментариях (Как мне добавить каталог, в котором находится моя программа, в путь поиска модуля/библиотеки? ).

Кроме того, вы можете сказать, что требуется загрузить путь, хотя тогда вам нужно убедиться, что программа может найти этот путь, даже если кто-то запускает его из другого каталога.

       require './this_file/over/here';
 require '/usr/local/lib/this_file/over/here';
Другие вопросы по тегам