2

ここで同じことにぶつかる他の2つの質問があることは知っていますが、私の提案は実際にそこにある提案を試すことから来ています.

セットアップは次のとおりです。 Strawberry Perl ディストリビューションがインストールされた Windows マシン上にいる誰かと共有したい複数のモジュールを含むアプリケーションがあります。

その構造は次のようなものです。

PerlApp
 lib
   Base
     Base.pm
     Gui.pm
   Db
     Db.pm
     records.db
   Parser
     Parser.pm
   Utils
     Utils.pm
 PerlApp.pl
 Config.txt

これにはすべて、2 つのエントリ ポイントがあります。PerlApp.pl スクリプトを使用して cmd ライン インターフェイスを介して実行するか、Wx インターフェイスを含む Gui.pm ファイルを実行します。

このプログラムで使用される CPAN からインストールされたいくつかのモジュールで Strawberry Perl を実行しています。Cava Packager を使用してみましたが、残念ながら、これを開発した perl のバージョンをサポートしていません。

ppを試しましたが、cmd スクリプトをパッケージ化した結果の実行可能ファイルでさまざまなエラーが発生します。ドキュメントを参照しましたが、私の人生では、このモジュールを使用して完全なディレクトリツリーをパッケージ化する方法、またはそれがサポートされているかどうかさえわかりません。(電話帳ドキュメンテーション症候群)

私は試した

pp -o app.exe PerlApp.pl

エラーは次のとおりです。

The locale codeset (cp1252) isn't one that perl can decode, stopped at Encode/Locale.pm line 94
Compilation failed in require at LWP/UserAgent.pm line 1000
Compilation failed in require at lib/Base/Base.pm line 9

最後の手段は、必要なすべてのファイルをパッケージ化し、外部マシンを動作させるためにどの CPAN モジュールをインストールする必要があるかを判断し、最終的にユーザーに自分で手動でインストールするよう依頼することです。

4

1 に答える 1

1

perl スクリプトをパックしたときに、charset (または Windows のコード ページ) に関連する同様のエラーが発生していました。どこでもグーグル検索しましたが、直接的な答えは見つかりませんでしたが、最終的には自分で見つけました。

  1. 実際、Encode モジュールは cp1252 をデコードできます。本当の問題は、RUNTIMEEncode::Localeで適切な文字セットを決定することですが、PP はコンパイル時に必要な依存関係を追加するだけです (私が言うなら)。そのため、実行時の依存関係を追加するには、コマンドにオプションを追加する必要があります。-x
  2. Encode::Locale完全に避けてください。必要なデコーダー pm を実行可能ファイルにパックしても、異なる文字セットを持つ別のシステムで実行すると、同様のエラーが発生します。コードのどの行を使用しているかを調べ、回避策を見つけることをお勧めしますEncode::Locale
于 2014-04-17T14:55:51.047 に答える