Глобальное использование расположения инструмента при использовании пакетов
У меня есть папка tmp , которая лежит в каталоге инструментов и содержит различные модули, такие как, например, myModul.pm:
package myModul;
print "path in myModul.pm: $dirNamen";
Те называются в основном, который выглядит следующим образом:
#!/usr/bin/perl
use strict;
use warnings;
use File::Basename;
use Data::Dumper;
use vars qw($dirName);
BEGIN{
$dirName = dirname(__FILE__);
print "tool location: $dirNamen";
# push @INC, "$dirName/tmp";
}
use lib "$dirName/tmp";
use myModul;
print Dumper @INC;
Путь dirName не был напечатан правильно в myModul.pm и это моя проблема. Если я удаляю строку package myModul
, это работает, но это не совсем способ справиться с этим.
Я просто хочу использовать расположение Perl-скрипта без его жесткого кодирования...
Я читаю: такие темы, как , что и , что и , что, но не могу понять, как это работает. Чего я не хочу, так это необходимости вручную устанавливать переменную окружения или что-то в этом роде. Это просто еще один источник проблем.
2 ответа:
То, что вы ищете, я думаю, это
FindBin
модуль.Он позволяет включать вещи относительно вашего текущего местоположения следующим образом:
use FindBin; use lib $FindBin::RealBin. "../mod_path"; use myModul;
(вы также должны включить
strict
иwarnings
)