PerlScriptの日本語処理バグ ― 2012年12月01日 14:59
Windows版のPerlであるActivePerlをインストールすると、WSH上で動作する言語エンジンの一つであるPerlScriptが使えるようになる。これによって、サクラエディタのマクロをPerl構文で書けるので重宝している。
ただし、PerlScriptには日本語処理に関するバグがある。文字数とバイト数の区別がごっちゃになっているために、スクリプト内に日本語が入っていると、その分だけスクリプトの最後のほうが読み込まれなくなるらしい。何年も前からバグ報告されているようだが、最近のバージョン(ActivePerl 5.16.1)でも状況が変わっていない。
現象や対策について書かれている記事をいくつか引用しておく。
http://undine.sakura.ne.jp/diary/d200608b.html#r18-1
http://miau.s9.xrea.com/blog/index.php?itemid=397
http://miau.s9.xrea.com/blog/index.php?itemid=659
http://aragger.blogspot.jp/2010/03/sleipnirperl.html
その場しのぎには、スクリプトの最後に、切り落とされてもいい文字列を多めにパディングしておけば誤魔化せることが多い。
もっと確実に動作させるには、require()関数で日本語混じりスクリプトを外部ファイルとして読み込めばよい。そのようなrequire()関数の入ったファイルを自動生成するPerlスクリプトを書き、pl2bat.batでバッチファイルに変換し、ドラッグ&ドロップで処理できるようにしている。
なお、これはPerlScript(拡張子.pls)で生じる問題であり、Perl本体(拡張子.pl)では問題ない。PerlScriptを使い始めの頃、この問題でかなりつまずいた記憶があるが、アドホクとはいえバグ回避方法があるので使い続けている。
ただし、PerlScriptには日本語処理に関するバグがある。文字数とバイト数の区別がごっちゃになっているために、スクリプト内に日本語が入っていると、その分だけスクリプトの最後のほうが読み込まれなくなるらしい。何年も前からバグ報告されているようだが、最近のバージョン(ActivePerl 5.16.1)でも状況が変わっていない。
現象や対策について書かれている記事をいくつか引用しておく。
http://undine.sakura.ne.jp/diary/d200608b.html#r18-1
http://miau.s9.xrea.com/blog/index.php?itemid=397
http://miau.s9.xrea.com/blog/index.php?itemid=659
http://aragger.blogspot.jp/2010/03/sleipnirperl.html
その場しのぎには、スクリプトの最後に、切り落とされてもいい文字列を多めにパディングしておけば誤魔化せることが多い。
もっと確実に動作させるには、require()関数で日本語混じりスクリプトを外部ファイルとして読み込めばよい。そのようなrequire()関数の入ったファイルを自動生成するPerlスクリプトを書き、pl2bat.batでバッチファイルに変換し、ドラッグ&ドロップで処理できるようにしている。
なお、これはPerlScript(拡張子.pls)で生じる問題であり、Perl本体(拡張子.pl)では問題ない。PerlScriptを使い始めの頃、この問題でかなりつまずいた記憶があるが、アドホクとはいえバグ回避方法があるので使い続けている。
最近のコメント