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::Unicode をロードするために、Encode.pm の 120 行目で使用されるランタイムの require でした。このプログラムを機能させるために、以下を使用しました。

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

バックスラッシュ (Windows の方法) を使用するとppコマンドが失敗するため、これらをスラッシュに置き換える必要があることに注意してください。

于 2013-08-30T00:52:57.000 に答える