■2006-02-16
* [今月のAcme] 閑話休題:threadsとencoding
えーと、先月に続き忙しくて日誌をつける気力がありません。もちろんAcme関連を書く気力もありません。ですので、ちょっと趣向を変えてthreadsとencodingについて書きます。ご存知のとおりencodingプラグマ(というかbinmode filehandle, layer
)とthreadsを併用するとPerlがクラッシュします。
use encoding 'euc-jp', STDOUT => 'shiftjis'; use threads; threads->new(\&subref)->join; # クラッシュ!
だいたいthreadsが使えるぐらいならutf8でソースを書いてuse utf8;
すればよいだけのことじゃないか、というのは言わない約束で。で、何とかthreadsとencodingを併用するお手軽な方法はないかと考えました。 ……
use acmencoding 'euc-jp', STDOUT => 'shiftjis'; use threads; threads->new(\&subref)->join; # クラッシュしない!
ご覧のように新たなプラグマ、acmencodingを使用すると、threadsと併用しても平気です。今ならおまけ機能として
use acmencoding ':binmode'; use threads; binmode(STDIN, ":raw :encoding(euc-jp)"); binmode(STDOUT, ":raw :encoding(shiftjis)"); threads->new(\&subref)->join; # クラッシュしない!
こんなこともできます。acmencoding.tar.gz。 あまり真面目に動作を期待しないでください。
encoding + threadで困っていたのですが,<br>大変助かりました〜.
私も助かりました。ActivePerlです。ありがとうございました。