【问题标题】:What to include when using Encode with PAR Packer将 Encode 与 PAR Packer 一起使用时要包括的内容
【发布时间】:2013-08-30 00:13:37
【问题描述】:

我一直在使用 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 打包后也是如此?

【问题讨论】:

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


    【解决方案1】:

    使用-x 选项运行pp 当然可以,但是在我的情况下使用它是不可接受的,因为它会运行程序,并且由于这是一个GUI 应用程序,因此该命令将不再是可自动化的。

    罪魁祸首是 Encode.pm 第 120 行用于加载 Encode::Unicode 的运行时要求。为了使这个程序正常工作,我使用了以下内容:

    pp -o encode_test.exe encode_test.pl -M C:/strawberry/perl/lib/Encode/Unicode.pm
    

    请注意,使用反斜杠(Windows 方式)会导致pp 命令失败,因此必须将其替换为正斜杠。

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-10
      • 2014-05-01
      • 1970-01-01
      相关资源
      最近更新 更多