Как модуль perl может найти свой собственный путь?
Я создаю свой собственный модуль, назовем это X::Y
. Конечно, модуль будет в файле X/Y.pm
.
допустим Y
необходимо вызвать внешнюю программу,prog
. В идеале я просто хотел бы поставить prog
на X
, так что я могу запустить X/prog
. Я хотел бы не иметь hardcode X/prog
s полный путь, и для работы модуля независимо от текущего рабочего набора каталогов.
как я могу найти полный путь к модулю из модуля? Или есть лучше как это сделать?
3 ответов
полный путь к исполняемому исходному файлу предоставляется Perl __FILE__
специальный литерал.
однако я бы предпочел, чтобы внешняя программа была установлена там, где она обычно будет, и путь там либо закодирован как константа в коде Perl, либо включен в PATH
переменные среды.
Бородин ответил на вопрос, но некоторую соответствующую информацию:
FindBin - находит каталог, из которого был запущен скрипт (используется в самом скрипте или в загруженном им пакете)
модули CPAN Нила Бауэра для получения пути модуля - подробный обзор модулей для поиска пути другого модуля.
как только модуль загружен, его путь находится в глобальном %INC
переменной. Чтобы посмотреть его, вам нужно сделать простое преобразование:
- изменить
::
в имени пакета в/
- добавить
.pm
Итак, чтобы найти расположение модуля X::Y
, вы бы посмотрели в $INC{"X/Y.pm"}
.