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