Perl 如何正确调用pp来打包此目录结构?

Perl 如何正确调用pp来打包此目录结构?,perl,deployment,perl-packager,Perl,Deployment,Perl Packager,我知道这里还有两个问题是针对同一件事的,但我的问题来自于实际尝试那里的建议,并且希望从那时起,有一些其他的选择对人们有用 设置如下所示: 我有一个包含多个模块的应用程序,我想与安装了草莓Perl发行版的Windows机器上的人共享 它的结构是这样的: PerlApp lib Base Base.pm Gui.pm Db Db.pm records.db Parser Parser.pm Utils Utils.

我知道这里还有两个问题是针对同一件事的,但我的问题来自于实际尝试那里的建议,并且希望从那时起,有一些其他的选择对人们有用

设置如下所示: 我有一个包含多个模块的应用程序,我想与安装了草莓Perl发行版的Windows机器上的人共享

它的结构是这样的:

PerlApp
 lib
   Base
     Base.pm
     Gui.pm
   Db
     Db.pm
     records.db
   Parser
     Parser.pm
   Utils
     Utils.pm
 PerlApp.pl
 Config.txt
所有这些都有两个切入点。我可以使用PerlApp.pl脚本通过cmd行界面运行它,也可以运行包含Wx界面的Gui.pm文件

我正在运行草莓Perl,其中包含几个从CPAN安装的模块,该程序使用这些模块。我尝试使用Cava Packager,不幸的是,它不支持我开发此软件时使用的perl版本

我已经尝试过了,但是打包cmd脚本所产生的可执行文件会导致各种错误。我查阅了文档,但就我的一生而言,我不知道如何使用此模块打包完整的目录树,或者是否支持此功能。(电话簿文档综合征)

我试过了

pp -o app.exe PerlApp.pl
错误是:

The locale codeset (cp1252) isn't one that perl can decode, stopped at Encode/Locale.pm line 94
Compilation failed in require at LWP/UserAgent.pm line 1000
Compilation failed in require at lib/Base/Base.pm line 9

最后的解决方案是打包所需的所有文件,找出需要在外部机器上安装哪些CPAN模块才能使其正常工作,并最终要求用户自己手动安装它们。

在打包perl脚本时,我曾经遇到过与字符集(或Windows上的代码页)相关的类似错误。我到处搜索,但没有找到任何直接的答案,但最终我自己找到了答案

  • 实际上,Encode模块能够解码cp1252,真正的问题是
    Encode::Locale
    运行时确定适当的字符集,而PP只是在编译时添加了必要的依赖项(如果我可以说的话)。因此,您需要在添加运行时依赖项的命令中添加
    -x
    选项
  • 完全避免
    Encode::Locale
    。即使将必要的解码器pm打包到可执行文件中,当它在另一个具有不同字符集的系统上运行时,也会发生类似的错误。我建议您找出代码的哪一行使用了
    Encode::Locale
    ,并找出解决方法

  • pp
    可能是一条出路。如果您对它的使用有问题,最好向我们展示错误消息等–理想情况下是一个完整、最小且可运行的示例来演示您的问题。我们可以试着帮你。我们无法通过指向来帮助您,因为它不存在。我对它的用法的问题是我不了解它的用法。是的,我知道。考虑到我在op中提到的结构,我如何实际运行它,甚至可以瞥见输出。我尝试了显而易见的pp-obla.exe PerlApp.pl。但我高度怀疑这是一种方式,除非pp聪明地在那个目录中环顾四周,就像你说的,一个美丽的愿望。啊。也许你可以回答你的问题,这样更明显的是,你实际上在问“打包此目录结构时正确调用
    pp
    的方法是什么–
    某些命令
    不起作用。”我没有必要的知识来回答这个问题,但你可以让其他人更容易回答。没问题。我输入了一个范围更广的问题,希望得到更多的意见。