Глобальное использование расположения инструмента при использовании пакетов


У меня есть папка 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 2

2 ответа:

То, что вы ищете, я думаю, это FindBin модуль.

Он позволяет включать вещи относительно вашего текущего местоположения следующим образом:

use FindBin;
use lib $FindBin::RealBin. "../mod_path";
use myModul;

(вы также должны включить strict и warnings)

Чтобы получить доступ к переменной в другом пакете,необходимо включить пакет в упоминание.

$main::dirName