Wide character in die at

Perlエンコードに関する話です。

結論から言ってしまうと、この警告メッセージは「Wide character in print at」のSTDERR(標準エラー)版なので、binmode(STDERR, ":utf8");を書いておくことで解決できるようになります。

f:id:tuttitan:20170123133157p:plain

 

「Wide character in print at」の問題は、出力しようとしている文字にutf8フラグなるものがくっついていると起こるみたいで、binmode(STDOUT, ":utf8");を書くことで問題を回避できます。これは『標準出力の文字エンコードはutf8ですよ』ということを指定するための文言っぽいです。

 

die "エラーが発生したので終了します: $!";
のようなコードをutf8でエンコードされているplファイルに書いて、その行が実行されると「Wide character in die at」が現れることがあります。

print は文字列をSTDOUTに出力し、dieは文字列をSTDERRに出力するためbinmode(STDOUT, ":utf8");と書いておいただけでは警告メッセージが出てしまいます。なので、ソースコードをutf8で書いた場合は、STDOUTと同様にSTDERRのbinmodeも指定しておきましょう。

# エンコードの設定
use utf8;
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");

 

 

参考Webページ