2

私はそれが醜いことを知っていますが、クライアント用に Windows で perl スクリプトをコンパイルする必要があるため、基本的には .pl スクリプトから .exe を作成しようとしています。

私はcpan経由でインストールされたPAR::Packerを使用しており、成功する前に一連の単純なスクリプトをコンパイルしました。

以前は問題なく動作していましたが、 use Text::CSV; を追加したため、現在は動作していないようです。

動作しますが、.exe を実行すると次のエラーが発生します。

Can't locate Text/CSV_PP.pm in @INC (@INC contains: CODE(0x25f1f84) C:\Users\user
\AppData\Local\Temp\par-6b6f6e74757a\cache-6d4baa68e36871e6407210ca47953c635f
81e612\inc\lib C:\Users\user\AppData\Local\Temp\par-6b6f6e74757a\cache-6d4baa6
8e36871e6407210ca47953c635f81e612\inc CODE(0x239f2ec) CODE(0x239f67c)) at (eval
18) line 2.
 at script/csvutil.pl line 5.
Compilation failed in require at script/csvutil.pl line 5.
BEGIN failed--compilation aborted at script/csvutil.pl line 5.

基本的に私がしていることは次のとおりです。

pp -o csvutil.exe csvutil.pl

強制ロードモジュールを追加しようとしました:

pp -M Text::CSV csvutil.pl

私は何かが欠けていると思います...

私はストロベリーパール5.16で作業しています

コードの冒頭:

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Text::CSV;

my $file = $ARGV[0];
my @rows;
my $csv = Text::CSV->new ( { binary => 1 ,sep_char => ",",allow_loose_quotes => 1, eol=> $/, always_quote =>1 } )  # should set binary attribute.
             or die "Cannot use CSV: ".Text::CSV->error_diag ();

     ...# basically print all the lines
4

3 に答える 3

3

Text::CSV は単なるインターフェースです。使用するバックエンド モジュールを自動的に決定します: 純粋な Perl Text::CSV_PP または XS (C コード) Text::CSV_XS のいずれかです。PAR は Text::CSV の静的依存関係を検出していますが、動的依存関係を解決できません。オプションを変更して-M、Text::CSV_XS または Text::CSV_PP のいずれかを含めます。XS バージョンがインストールされている場合はバンドルします。それははるかに高速です。

于 2013-01-10T16:02:31.900 に答える
0

のパスに問題がある可能性があります@INC。おそらくあなたの答えがここにあるかもしれません

于 2013-01-10T18:11:31.777 に答える
0

PAR から離れてCava Packagerを使用することをお勧めします。私は過去に PAR を使用したことがありますが、アプリケーションをパッケージ化するかどうかにかかわらず、成功するか失敗するかでした。特定のモジュールをうまく処理できないようで、リソースがまばらで処理できないモジュールに遭遇した場合、修正は通常汚いハックです。Gtk+/Tk アプリは PAR に本当に苦労します。

一方、Cava Packager は非常に堅牢で、積極的にメンテナンスされており、私が投げたすべてのモジュールを処理することができました。あなた/コミュニティは、特定のモジュールの特殊なケースを処理する方法に関するルールを作成できます。私が遭遇した問題はすべて、有効なメーリング リストによって迅速に解決されました。プロジェクト設定を構成するための GUI を提供します。アプリをパッケージ化するときにインストーラーを自動的に作成する InnoSetup サポートがあります。それは積極的に維持されており、現在オープンソースになるために取り組んでいます。Cava Packager を見つけるまで、perl スクリプトを配布用の実行可能ファイルとしてパッケージ化するという考えはほとんどあきらめていました。Cava は、PAR と ActiveState の perl2exe を使用した後、私が設定した期待をはるかに超えました。私は Cava の開発者のように聞こえるかもしれませんが、実際にはそうではありません。とても幸せです。

これがあなたが提起した質問に正確に答えるわけではないことはわかっていますが、あなたの問題に対処しているので、Cava が私と同じくらい役立つと思うかもしれません.

于 2013-01-11T18:54:41.240 に答える