Вызов модуля Perl из текущего каталога - PullRequest
3 голосов
/ 26 августа 2010

Мне нужно протестировать скрипт на удаленном сервере.Я попытался запустить его, но я получил ошибку

Can't locate Date/Manip.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl . 

Итак, я скачал файл DateManip.pm и попытался скопировать его в одно из указанных мест.Но у меня нет разрешения копировать файл в любом из этих мест.Есть ли способ, которым я могу иметь этот * .pm файл в своем собственном каталоге и вызывать его оттуда, или я ДОЛЖЕН поместить его в одно из этих мест?

Ответы [ 2 ]

7 голосов
/ 26 августа 2010

Правильный способ сделать это - установить DateManip.pm, очевидно, однако, если вы по какой-то причине не можете этого сделать, вы можете скопировать модуль в любой каталог, к которому у вас есть права на запись, и изменить скрипт perl, включив в него следующее:

 use FindBin qw($Bin);
 use lib "$Bin/<relative_path_to_module>";

<relative_path_to_module> - это относительный путь к каталогу, в котором находится DateManip.pm. Так что, если относительный путь к модулю ../lib, вы получите

use FindBin qw($Bin);
use lib "$Bin/../lib";
3 голосов
/ 26 августа 2010

По умолчанию Perl также ищет модуль в текущем каталоге (где он запускается).Таким образом, будет работать следующее:

./your_program.pl     <= "use DateManip"
./DateManip.pm

Если бы модуль назывался Date :: Manip, тогда структура должна была бы быть такой:

./your_program.pl     <= "use Date::Manip"
./Date/
./Date/Manip.pm
...