普段は「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。
それ以外はエラー。
| Perl6::Say | feature 'say' | Modern::Perl (print) | Modern::Perl (say) | ||
|---|---|---|---|---|---|
| STDOUT | NG | OK | NG | NG | NG |
| FILE | NG | (syntax error) | NG | NG | NG |
| FILE(OO) | (no method) | NG | (no method) | (no method) | (no method) |
sayを使うときには気を付ける必要がありそうだ。


コメントする