我一直在使用PAR :: Packer从Perl脚本中创建独立的可执行文件。我遇到的唯一困难是弄清楚我必须通过-l
选项强制包含哪些额外的DLL。
我现在正在使用需要使用utf16-le进行编码的Perl脚本。 Encode::find_encoding
函数在脚本中运行得很好,但在用pp
打包后它无法正常工作。
这是一个小小的脚本(让我们称之为encode.pl)来说明问题:
use strict;
use warnings;
use Encode;
my $_UTF16 = Encode::find_encoding ('utf16-le');
print $_UTF16;
如果你运行它,它将打印类似Encode::Unicode=HASH(xxxxxx)
的内容。然而,使用pp
打包它,它不再有效:
pp -o encode_test.exe encode_test.pl
现在,当我运行encode_test.exe时,我得到了这个:
Use of uninitialized value $_UTF16 in print at script/encode_test.pl line 5.
任何人都可以告诉我我需要做什么(例如,要包含哪些库或任何其他解决方案),即使在使用pp
打包后也能正常工作?
答案 0 :(得分:1)
当然,使用pp
选项运行-x
是有效的,但在我的情况下使用它是不可接受的,因为这会运行程序,因为这是一个GUI应用程序,这个命令将不再是自动化的
罪魁祸首是Encode.pm,第120行使用的运行时需求,以加载Encode :: Unicode。为了使这个程序有效,我使用了以下内容:
pp -o encode_test.exe encode_test.pl -M C:/strawberry/perl/lib/Encode/Unicode.pm
请注意,使用反斜杠(Windows方式)会导致pp
命令失败,因此必须使用正斜杠替换它们。