読者です 読者をやめる 読者になる 読者になる

ソースコードをutf8で書く

use utf8;

ソースコードをutf8で書くときは、use utf8を書く。こうするとソース内の文字列リテラルがutf8だと解釈されるようになる。
しかし、こうしてプログラム全体でutf8を使うようになったときに次のことに困る。

Wide character in print at C:/Users/def/dev/piyo2ch/test.pl line 13.
Wide character in print at C:/Users/def/dev/piyo2ch/test.pl line 13.
蝨ー髴?蝨ー髴?eadline,http://headline.2ch.net/bbynamazu/,
蝨ー髴?蝨ー髴??蝣ア,http://news21.2ch.net/namazuplus/,

こんなの。
この対策として、

binmode(STDOUT, ':utf8');

と、STDOUTのIOレイヤーでPerlの内部エンコーディング(utf8)の通過を許可するように指定しておいて、

> perl piyo.pl | nkf -s

としたり、

binmode(STDOUT, 'encoding(:sjis)');

とSTDIOのIOレイヤーでsjisに変換するように指定しておけば警告もでず化けもせず表示できる。