Как включить модули Perl с путями относительно программы? - PullRequest
0 голосов
/ 08 сентября 2010

У меня есть скрипт Perl, который использует установленные пакеты. Один - это пакет Perl, другой - пакет Perl XS.

Теперь я хочу вызвать этот скрипт, но использую не установленные пакеты, а пакеты с одинаковым именем по пути.

Я использовал perl -I /home/.../lib script.pl, но он не работает

Как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 08 сентября 2010

Чтобы узнать, как загружать ваши модули, ознакомьтесь с этой публикацией SO:

Как построен @INC в Perl?(ака, какие есть способы повлиять на поиск модулей Perl?)

1 голос
/ 09 сентября 2010

Можете ли вы показать нам рекурсивный список каталога, в котором вы храните модули, которые хотите использовать? ls -R может помочь нам выяснить, есть ли у вас правильные пути.

Когда вы используете переключатель -I, вы должны убедиться, что вы нашли правильный путь там. Если вы используете модуль:

 use Some::Module;

Perl на самом деле ищет:

 $lib/Some/Module.pm

$lib является одним из каталогов в @INC. Однако можно сказать, что если другой каталог находится не в @INC, Perl не будет его искать. Это означает, что Perl не будет автоматически искать для вас подкаталоги

Если ваш модуль не находится в этом месте, Perl не собирается рыться в этом $lib, чтобы найти его. Ваш модуль XS, вероятно, не хранится таким образом. Он может иметь версию Perl и тип архива в пути, поэтому вы можете найти его в:

 $lib/5.10.1/darwin-2level/Some/Module.pm

Вам необходимо добавить эти пути самостоятельно, если вы используете -I.

Однако вы можете загружать модули в командной строке. Гораздо проще использовать lib, который добавляет для вас дополнительные каталоги:

 perl -Mlib=/path/to/lib ...
1 голос
/ 08 сентября 2010

Вы можете использовать прагму lib, чтобы добавить каталоги к пути, который perl использует для поиска модулей.

Итак, если в каталогах по умолчанию установлен модуль с именем Foo, а в /home/cowens/perl5 установлена ​​другая версия, вы можете сказать

use lib "/home/cowens/perl5";
use Foo;

и perl найдут версию в /home/cowens/perl5.

...