0

У меня есть программа perl, которая использует WWW::Mechanize::Firefox на windows 7 32bit с клубничным perl.Perl Par :: Packer Не удается найти ошибку модуля

Он отлично работает с командой C:\>perl testcase.pl. Когда я компилирую его с помощью C:\>pp -o testcase.exe testcase.pl, он компилируется без ошибок.

Когда я бегу testcase.exe это дает мне ошибку:

Failed to connect to , Can't locate object method "setup" via package "MozRepl::Client" at MozRepl.pm line 224 

код я использую для testcase.pl является:

#!perl 
use MozRepl; 
use WWW::Mechanize::Firefox; 
use warnings; 
system('start firefox'); 
sleep(5); 
$mech = WWW::Mechanize::Firefox->new; 

отметить также, что программа без WWW::Mechanize::Firefox и MozRepl делает работу штрафа , Проблема, очевидно, была сокращена до PAR::Packer не нравится MozRepl, любая идея, что это может быть?

ответ

2

PAR :: Packer иногда испытывает трудности с определением того, какие модули должны быть включены в пакет PAR, чтобы выполнить все требования программы, которую вы пытаетесь упаковать.

Он обрабатывает ОК, если зависимости загружаются с помощью простых команд «use» или «require», где загружаемый модуль является литеральной строкой, но у него не будет большого шанса, если модуль загружается динамически с помощью что-то вроде:

require $myModuleToLoad; 

Сидя исходный код MozRepl и смежных модулей показывает, что они делают интенсивное использование плагинов загружаются динамически. Я подозреваю, что некоторые из них не упакованы.

Вы можете вручную указать модули (модули), которые должны быть включены в пакет PAR, добавив -M Module::Name в командную строку pp для каждого добавляемого модуля (заменив Module :: Name на фактическое имя модуля, конечно).

Жесткая часть может определять, какие модули включать. Один из способов сделать это временно добавить что-то вроде этого в конце сценария:

END { print "$_ -> $INC{$_}\n" foreach sort keys %INC; } 

затем запустить скрипт нормально, а не через PAR. Он должен перечислить все загруженные модули. Вы можете сравнить это с фактическими модулями, присутствующими в пакете PAR, и добавить недостающие с помощью опции -M на стр.

Вы можете увидеть модули внутри вашего файла PAR, открыв его с помощью распаковочного инструмента, такого как 7zip. Либо в Linux:

unzip -l {parfile} 

 Смежные вопросы

  • Нет связанных вопросов^_^