- ベストアンサー
Perl5.8について詳しく書かれている書籍
最近Perl5.8にし、文字コードをUTF8をベースに使うようになりました。 以前は、5.6を使っていたので、文字コードについては、あまり意識せず、 出力時のみ気を使っていました。Perl5.8からPerlIOというものがあり、 いまいち理解しづらいのですが、PerlIOについて詳しく書かれている書籍(5.8以上に特化) を探しているのですが、お薦めがございました ら是非お教えください。 最悪、洋書でも構いません。 IO::Fileを使って、入力文字コードは euc-jpで、出力文字コードはシフトJISにする 設定方法がしりたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
とりあえずCPANから,書籍の案内を探すとか オライリーのサイトを見るとか >IO::Fileを使って、入力文字コードは euc-jpで、出力文字コードはシフトJISにする これはオンラインドキュメントの encodingモジュールとかそのあたり 洋書でよいならこのドキュメントでもOKでしょう. ところで5.8の和書ってあるんでしょうか #らくだ,リャマは5.6でしたっけ 知り合いの某コンピュータ出版社の編集さんに 聞いたら,5.8の書籍の企画はないとか いってたくらいで(^^;;;
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>>:encoding(utf8)では正しく変換してましたが、 >>:encoding(utf-8)では正しく変換している部分はかなりありますが、一部正しく変換しておりません。 ちょっとわからないです。 というか、UTF8ベースで書いている(use encoding 'UTF-8')時には、出力のencodeは、必要ない(デフォルトでUTF8で出力される)です。 >utf8, utf-8と似たような表現方法がありましが、 >大違いなのでしょうか? 使っているモジュールでちょっとちがうのかもしれません。 私には、ちょっと違いはわかりません。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>:encoding() プラグマ?を使うんですね。 「:encoding()」 は、レイヤーといいます。いわゆるPerlIOです。PerlIOレイヤー。 他には、 :unix :crlf :raw とか色々のレイヤーがあります。重複指定もできます。 例えば :raw:encoding(shiftjis) とか binmode STDOUT => ":raw:encoding(UTF-16LE)"; とか use encoding 'utf8' STDOUT => ":encoding(shifitjis)"; みたいなこともできます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>IO::Fileを使って、入力文字コードは euc-jpで、出力文字コードはシフトJISにする こんな感じ --------------------------- use encoding 'UTF-8'; use IO::File; $in = new IO::File; $out = new IO::File; $in->open("EUC.TXT", "<:encoding(euc-jp)"); $out->open("SJIS.TXT", ">:encoding(shiftjis)"); while(<$in>){ print $out $_; } $out->close; $in->close; -------------------------------------------------- また、IO::Fileを使わないで use encoding 'UTF-8'; open(IN, "<:encoding(euc-jp)", "EUC.TXT"); open(OUT,">:encoding(shiftjis)","SJIS.TXT"); while(<IN>){ print OUT; } close(OUT); close(IN); でいいです。同じ意味。
補足
なるほど、 :encoding() プラグマ?を使うんですね。 この例題を使わせて頂いて、以下の2つを確めた所 >:encoding(utf8)では正しく変換してましたが、 >:encoding(utf-8)では正しく変換している部分はかなりありますが、一部正しく変換しておりません。 utf8, utf-8と似たような表現方法がありましが、 大違いなのでしょうか?