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