Perl: «Установить» пользовательский модуль из локального файла .pm в среду выполнения Perl?
Здесь новичок в Perl, у которого очень мало времени и поддержки для изучения Perl, но все ожидания от руководства использовать его как Perl Pro :)
Я использую Perl (v5.30.2 Ларри Уолла) под Cygwin (Windows 10)
Мой разработчик выпустил новый скрипт, который теперь использует модуль Perl, которого у меня не было.
Затем они прислали мне файл .pm (который они создали сами, и его нет ни в одном онлайн-репозитории Perl).
Мне не удалось использовать CPAN для установки этого файла в мою среду выполнения Perl.
- Где должен быть сохранен файл .pm? (пожалуйста, укажите точную папку)
- Как сказать 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';