2

我一直在使用 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

4

1 回答 1

2

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命令失败,因此必须将其替换为正斜杠。

于 2013-08-30T00:52:57.000 回答