使用PAR Packer进行编码时要包含的内容

时间:2013-08-30 00:13:37

标签: perl dll encoding utf-16le pp-perl-par-packager

我一直在使用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打包后也能正常工作?

1 个答案:

答案 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命令失败,因此必须使用正斜杠替换它们。