Как мой сценарий Perl может найти свой модуль в том же каталоге?

Да, это возможно.

Вы просто будете обращаться с ним как с любым обычным объектом и использовать его для своих значений или стиля. См. здесь для полного объяснения.

49
задан Foo Bah 9 October 2011 в 13:39
поделиться

4 ответа

Самый простой подход я нашел, что это использовало модуль FindBin. Как это:

use FindBin;
use lib $FindBin::Bin;

Обычно я предпочитаю предоставлять свои сценарии таким способом, которым программы находятся в том, что, и библиотеки находятся во что

В этих ситуациях я использую немного более сложный подход:

use Cwd qw(abs_path);
use FindBin;
use lib abs_path("$FindBin::Bin/../lib");

Вызов abs_path должен заставить @INC содержать то, что, и не whatever/bin/../освобождать - это - просто небольшое изменение, но делает сообщения ошибки отсчета легче.

52
ответ дан temporary_user_name 7 November 2019 в 11:27
поделиться

Смотрите по номиналу:: Упаковщик. Это создает исполняемый файл со всеми включенными зависимостями сценария. Это делает распределение легким. Вы также могли также предоставить Вашим пользователям версию своего модуля, который может быть установлен в их системах. Посмотрите Модуль:: Начинающий для простого способа создать все файлы, требуемые сделать стандартное распределение CPAN-стиля.

3
ответ дан Community 7 November 2019 в 11:27
поделиться

Из perlfaq8 , который отвечает «Как добавить каталог в мой include путь (@INC) во время выполнения? ". Есть также несколько других ответов на вопросы по этой проблеме.


Как добавить каталог к ​​моему пути включения (@INC) во время выполнения?

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

переменная среды PERLLIB

$ export PERLLIB=/path/to/my/dir
$ perl program.pl

переменная среды PERL5LIB

$ export PERL5LIB=/path/to/my/dir
$ perl program.pl

флаг командной строки perl -Idir

$ perl -I/path/to/my/dir program.pl

использование lib pragma:

use lib "$ENV{HOME}/myown_perllib";

Последнее особенно полезно, потому что он знает о машинно-зависимых архитектурах. Прагматический модуль lib.pm был впервые включен в версию Perl 5.002.

13
ответ дан brian d foy 7 November 2019 в 11:27
поделиться

Чтобы преобразовать относительные ссылки в абсолютные и добавить в @INC, я обычно использую ex :: lib. Конечно, это полезно, только если вы планируете сохранять одинаковое расположение скрипта и модуля на всех компьютерах, где вы планируете запустить скрипт.

0
ответ дан Ya. Perelman 7 November 2019 в 11:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: