普段は「binmode STDOUT => ‘:encoding(cp932)’;」とやっているので、Wide characterとは無縁なわけです。 が、データベースとのやりとりを整理する上で気になったので、printとsayを標準出力とファイルで実験してみました。 使用したのはStrawberry Perlの5.10.1.0のmsi版。 結果を先に書くと、Perl6::Sayのsayコマンドは、STDOUTに出力するときは、内部形式から変換してくれるらしい事がわかりました。
普通、use utf8した状態で、Perlの内部形式のまま出力すると「Wide character in print ~~~」というようなエラーメッセージがでる。 しかし、Perl6::Sayのsayコマンドだとエラーにならない。 それなら、と思って「use Modern::Perl」してsayコマンドを試してみたのだが、こっちは「Wide character」になるのだ。 当然、「use feature ’say’」しても「Wide character」だった。 ソースはdevel.nqou.netのDirectory Listのmiscellaneous以下にあります。 まとめると以下のような感じ。 OKは問題なし。NGはWide character。 それ以外はエラー。
print Perl6::Say feature ‘say’ Modern::Perl (print) Modern::Perl (say) STDOUTNGOKNGNGNG FILENG(syntax error)NGNGNG FILE(OO)(no method)NG(no method)(no method)(no method)
sayを使うときには気を付ける必要がありそうだ。