perl PAR packager (ppコマンド) と Encode モジュール

Encode モジュールを使って書いた perl script を (Windows用に) executable にしようと思って pp コマンドを使ったのだが,うまく動かない.
さんざん悩んでなんとか動くようになったと思ってからウェブを調べてみると,
みんな同じところで苦労している.馬鹿みたいであった.
でも,ウェブには載っていない (ように見える) 話もあった.

pp は,script が動作するのに必要なライブラリファイルたちを集めてパッケージングし,
できあがったexecutableは,そのパッケージをほどいて実行する,という,まあ乱暴と言えば
乱暴なコンセプトで動いているらしい.
そのため,「必要なライブラリたち」をかき集めるのだが,Encode モジュールでは,
動的にrequire するようなことをしているので,漏れが起こりやすい,ということのようだ.

みんな口を揃えて言っているのが,script では必要なくても use Encode::JP;
やっておけ,ということ.
(これを読んでおけばもっとずっと早く終わったろうに…)

でも,今回の場合はそれだけではだめであった.utf8_heavy.pl というのがパッケージされず,
次のエラーになって動かない.

Can't locate utf8_heavy.pl in @INC (@INC contains: ...(略)...

この utf8_heavy.pl がパッケージに入らない,というトラブルは2010年頃にも報告されていて,
それは直ったそうなのだが,また違う場所なのだろう.
ともあれ,以下のコマンドを実行することで動作するものが作成できた.

pp -a "c:/pkg/strawberry/perl/lib/utf8_heavy.pl;lib/utf8_heavy.pl" -o foo.exe foo

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*