От ответа perlfaq8 на Как добавить каталог, в котором находится моя программа, к пути поиска модуля / библиотеки?
(предоставлено Брайаном Д. Фой)
Если вы уже знаете каталог, вы можете добавить его в @INC, как и для любого другого каталога. Вы можете, если вы знаете каталог во время компиляции:
use lib $directory;
Хитрость в этой задаче - найти каталог. Прежде чем ваш скрипт сделает что-то еще (например, chdir), вы можете получить текущий рабочий каталог с помощью модуля Cwd, который поставляется с Perl:
BEGIN {
use Cwd;
our $directory = cwd;
}
use lib $directory;
Вы можете сделать аналогичную вещь со значением $ 0, которое содержит имя скрипта. Это может содержать относительный путь, но rel2abs может превратить его в абсолютный путь. Как только у вас есть
BEGIN {
use File::Spec::Functions qw(rel2abs);
use File::Basename qw(dirname);
my $path = rel2abs( $0 );
our $directory = dirname( $path );
}
use lib $directory;
Модуль FindBin, который поставляется с Perl, может работать. Он находит каталог текущего запущенного скрипта и помещает его в $ Bin, который затем можно использовать для построения правильного пути к библиотеке:
use FindBin qw($Bin);
Вы также можете использовать local :: lib, чтобы сделать то же самое. Установите модули, используя настройки local :: lib, затем используйте модуль в вашей программе:
use local::lib; # sets up a local lib at ~/perl5
Более подробную информацию смотрите в документации local :: lib.