件って何だよ。
ちょっと考えたけど、これだけか。@list = $str =~ m/(.*?)(?:\n-+\n)/gs;
なんか、gnuwin32のcatでファイルをまとめてから受け取ったときと、perlの引数としてファイル名を指定したときの動作が違う。cat経由だとMalformed UTF-8 character (unexpected continuation byte 0xa2, with no preceding start byte) in pattern match (m//) at ..
\perl\splitfaqs.pl line 4, <> line 545.とか出る。
どれか。
むしろ、文字コード周り=腐海なので、黙ってUTF-8で統一するのが大人のマナー。Shift_JIS、森へお帰り。
追記:いや、片手落ち。テキストの末尾が取得できないな。後から@list = $str =~ m/(.*?)(?:\n-+\n|\z)/gs;
、とか。
とりあえず3.は真です。<br>スクリプトを見ないと断言できない部分がありますが、<br>パイプ経由でデータを取ってきたときと@ARGV経由で読んだときでは<br>微妙に違う部分があります。<br>あと、splitの方ですが、ファイルの内容を丸呑みしたのなら<br>split /(?<=\n)-+(?=\n)/, $str;<br>ではいかんでしょうか?
PerlはActivePerl 5.10.0 build 1003で、スクリプトはこんなです。<br><br>use encoding "cp932";<br><br>$str = join("\n", <>);<br>@list = $str =~ m/(.*?)(?:\n-+\n|\Z)/gs;<br>print scalar @list;<br><br>もしかしてこれが足りないのかな。<br>use open ":encoding(cp932)";<br>use open ":std";<br>STD(IN|OUT)に対するuse open ":std"とuse encodingの影響の違いがよくわかりませんが。<br><br>splitは、それでいけました。splitだと/s modifierが指定できないから複数行のテキストが分割できんなあとか勝手に思ってました。\nですね。
はい。use encoding 'cp932' では、<>で読み込むストリームに対して影響を及ぼしません。<br>use open 〜 でOKなのは、<>のストリームが、その宣言(?)の後で<br>オープンされるものだからです。<br>ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html#translate
ありがとうございます。<br>かなり理解が深まったと思います。