Sun, 20 Jul 2008
ジュース,焼き鳥,たこせん,焼きそば,フランクフルト,カレー,ベビーカステラなどを食べながらウロウロ.刀根山小学校のグランドでやってるのと,町の人がボランティアでやってる(?)せいか,文化祭とかバザーっぽい雰囲気です.粉モンとビールがないのがちょっと物足りなかったので,来年はビールを持参しよう(そういえば去年も「来年はビール持参だ」と思っていたような気がする).
Perl+Perl/Tkで作ったスクリプトはPerl Dev Kit 7(有料)に含まれるPerlAppやPAR(無料)を使えばWindowsの実行形式ファイル(.exeファイル)に変換できますが,しょーもないところでつまずきます.特ににPerlAppは日本語の情報がほとんどないので苦労しました.ひょっとして同じような苦労をされる方がいるかもしれないので(あと自分への備忘録として),ここにメモしておきます.なお,PerlスクリプトはEUC-JPで保存してることを前提にしています.
Perl/Tk:
use encoding "eucj-jp";
と宣言すれば日本語も表示できるようになります.しかし,この宣言に伴って全ての変数の内部表現がutf8に変わってしまうので,変数を扱う度にencodeしたりdecodeしたりする羽目になります.
PAR:
外部から取り込んだ変数は
our $eucjp = Encode::find_encoding('eucjp');
$foo = $eucjp->decode($foo);
などで内部表現に変換する必要があります.しかし,Perlスクリプトから実行するときは変換すると動きません.
PerlApp:
use Encode::JP;
がないとコンパイルが通りません(PARだと通ります).
また,Perl/Tkを使っているときは,
use Tk::Button;
use Tk::Checkbutton;
use Tk::Label;
use Tk::Entry;
use Tk::ProgressBar;
use Tk::Photo;
などは明示的に宣言しないと,日本語を含むディレクトリから起動できません(PerlスクリプトやPARで作成したexeファイルだと宣言してなくても問題なく動きます)
書いてしまえばこれだけですが(他にもあったかもしれませんが),調べたり試行錯誤するのがけっこう大変でした.
なお,PerlAppとPARの違いですが,PerlAppで作ったほうがexeファイルのサイズが小さくなり(僕の作ったプログラムの場合,PARで4.07MB,PerlAppで2.69MBになりました),起動速度も少し早くなります.また,PARはzipで固めただけなので解凍すればPerlスクリプトが丸見えですが,PerlAppだとうまく隠されているようです.