トップ «前の日記(■2006-02-08) 最新 次の日記(■2006-03-01)» 編集

どんぞこ日誌

2003|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|07|08|12|
2007|01|04|08|12|
2008|01|02|03|04|06|07|08|10|11|12|
2009|01|02|04|05|06|07|08|09|11|12|
2010|01|03|04|07|08|10|11|12|
2011|01|02|03|04|05|06|07|08|10|12|
2012|01|02|03|05|06|07|08|09|10|
2013|01|02|07|08|09|
2014|08|09|
2015|08|
2016|06|07|12|
2017|01|03|08|
2018|03|
2022|03|

同人関連(どんぞこ楽屋) | 旧い雑文   


■2006-02-16

* [今月のAcme] 閑話休題:threadsとencodingB!

  えーと、先月に続き忙しくて日誌をつける気力がありません。もちろん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。 あまり真面目に動作を期待しないでください。

本日のツッコミ(全2件) [ツッコミを入れる]
_ いのうえ (■2006-06-14 19:22)

encoding + threadで困っていたのですが,<br>大変助かりました〜.

_ tf0054 (■2007-06-10 16:09)

私も助かりました。ActivePerlです。ありがとうございました。

[]