open

open (Perl)

[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) を使うとよさげです。 多少パフォーマンスは落ちるかもですが。。。