[1]
Perl 5.8以降ではopenで文字列をファイルハンドルにすることができます。
(それ以前ではIO::Stringで同じことが実現できます。)
my $string = q<... some string ...>; open my $fh, '<:utf8', \$string;
PerlIO層として:utf8を指定しておくことで、utf8旗付きの文字列を扱うことができます。
(例えば$fh->getcで、
非ASCII文字を文字として順に得られます。)
(名無しさん)
[2] Perl 5.8.7 for Linuxと5.8.4 for Windows XPで試したところでは、改行を勝手に変更してくれることはないようです。 (名無しさん)
[3]
:utf8としておけばutf8旗付き文字列とASCII文字列は文字列として扱われますが、
U+0100以上の文字が1文字も含まれていないISO/IEC 8859文字列になっている時に:utf8がついていると、不正なUTF-8文字があると言われてしまいます。
かといって:utf8を付けないと常にバイト列扱いになってしまいますし。。。
仕方が無いのでutf8:is_utf8で場合分けすることにします。。。
(名無しさん)
[4]
openの第1引数に変数を指定した場合、
その変数はIO::Handleオブジェクトになりますから、
IO::Handleで定義されているメソッドが使えます。
my $ch = $fh->getc;
のようにオブジェクト指向な書き方ができます。ただし、明示的に
require IO::Handle;
とでもしておかないといけません。
(名無しさん)
[8]
>>3 :utf8 ではなく :encoding(utf8) を使うとよさげです。
多少パフォーマンスは落ちるかもですが。。。