Perl Par::P acker 找不到模块问题



我有一个perl程序,它在windows 7 32位上使用WWW::Mechanize::Firefox和草莓perl。

它与命令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::FirefoxMozRepl的程序确实可以正常工作。问题显然已经缩小到PAR::Packer不喜欢MozRepl,你知道这可能是什么吗?

标准杆数::Packer有时很难确定哪些模块需要包含在标准杆数包中,以满足您试图打包的程序的所有要求。

如果依赖关系是通过简单的"use"或"require"语句加载的,其中要加载的模块是一个文字字符串,它可以处理,但如果模块是用以下内容动态加载的,它就没有太大机会了:

require $myModuleToLoad;

浏览MozRepl和相关模块的源代码表明,它们大量使用动态加载的插件。我怀疑其中一些没有包装。

您可以手动指定要包含在标准杆数包中的模块,方法是将-M Module::Name添加到要添加的每个模块的pp命令行中(当然,将模块::名称替换为实际模块名称)。

最困难的部分可能是确定要包括哪些模块。一种方法是在脚本末尾临时添加这样的内容:

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

然后正常运行脚本,而不是通过标准杆数。它应该列出所有加载的模块。您可以将其与标准杆数包中的实际模块进行比较,并使用-M选项将缺失的模块添加到第页

您可以通过使用解压工具(如7zip)打开标准杆数文件来查看其中的模块。或者在Linux中:

unzip -l {parfile}

相关内容

  • 没有找到相关文章

最新更新