Пакер PAR не включает определяемые пользователем модули
У меня есть сценарий Perl test.pl, который включает в себя другой модуль Perl fact.pm, который находится в каталоге crypt/Module dir. Исходный код crypt/test.pl:
#!/usr/bin/perl
use Term::ANSIColor qw(:constants);
use File::Path;
use POSIX qw(strftime);
use File::Basename qw(dirname);
use Cwd qw(abs_path);
use lib dirname(dirname abs_path $0);
use crypt::Module::fact qw(factorial);
&factorial();#function present in fact.pm
print("Thanks for that thought \n");
Данная команда упаковщика PAR:
pp -M Module::fact -o test test.pl
при копировании только исполняемого теста по другому пути к каталогу и его выполнении я получаю следующую ошибку:
Can't locate crypt/Module/fact.pm in @INC (you may need to install the crypt::Module::fact module)
как можно включить модуль в исполняемый файл?
1 ответ
Во-первых, я бы порекомендовал использовать опции -c и / или -x для утилиты pp, которые используются "для определения дополнительных зависимостей времени выполнения". Я привык использовать оба.
Хотя вы используете опцию -M для добавления модуля, я думаю, что у вас есть опечатка с этой опцией. В вашем коде вы используете модуль "crypt:: Module:: fact", но вы указываете модуль "Module:: fact" с опцией -M. Возможно, если вы использовали "-M crypt:: Module:: fact" вместо "-M Module:: fact", ваша проблема может быть решена.
Также вам может понадобиться использовать -I (или -lib), чтобы указать путь к любым дополнительным каталогам библиотек модулей.