Как модуль perl может найти свой собственный путь?

Я создаю свой собственный модуль, назовем это X::Y. Конечно, модуль будет в файле X/Y.pm.

допустим Y необходимо вызвать внешнюю программу,prog. В идеале я просто хотел бы поставить prog на X, так что я могу запустить X/prog. Я хотел бы не иметь hardcode X/progs полный путь, и для работы модуля независимо от текущего рабочего набора каталогов.

как я могу найти полный путь к модулю из модуля? Или есть лучше как это сделать?

3 ответов


полный путь к исполняемому исходному файлу предоставляется Perl __FILE__ специальный литерал.

однако я бы предпочел, чтобы внешняя программа была установлена там, где она обычно будет, и путь там либо закодирован как константа в коде Perl, либо включен в PATH переменные среды.


Бородин ответил на вопрос, но некоторую соответствующую информацию:

FindBin - находит каталог, из которого был запущен скрипт (используется в самом скрипте или в загруженном им пакете)

модули CPAN Нила Бауэра для получения пути модуля - подробный обзор модулей для поиска пути другого модуля.


как только модуль загружен, его путь находится в глобальном %INC переменной. Чтобы посмотреть его, вам нужно сделать простое преобразование:

  1. изменить :: в имени пакета в /
  2. добавить .pm

Итак, чтобы найти расположение модуля X::Y, вы бы посмотрели в $INC{"X/Y.pm"}.