Bruce.です。
藤岡和夫 さんは書きました (2006/04/28 22:53):
>> ところで、splitの引数なんですけど、\r\n|[\r\n] (順番が逆)にしないと
>> 誤動作するような気がするんですが気のせい?
>
> これは、よくわからないけど。僕が使っているのはもっとラフで
正規表現は最左最長マッチが原則ですから、[\r\n]が先にあると、
hogehoge\r\n
という行があったときに、\r と \n の間に空のフィールドが
あると判断されます。まあ、空なんで処理に影響しないのかも
しれませんが。
use strict;
use warnings;
use File::Slurp;
my $contents = read_file('crlf.txt');
my @p1 = split /\r\n|[\r\n]/, $contents;
my @p2 = split /[\r\n]|\r\n/, $contents;
my $s1 = join "\x00", @p1;
my $s2 = join "\x00", @p2;
print unpack 'H*', $contents;
print "\n#####\n";
print unpack 'H*', $s1;
print "\n#####\n";
print unpack 'H*', $s2;
6162630d6465660d0a6768690a
#####
6162630064656600676869
#####
616263006465660000676869
ちょっとわかりにくいですが、三番目の例の出力では\r\nがひとつの
セパレータではなく、二つのセパレータが連続しているように
判定されています。
> [ \t]*[\r\n]+[ \t]*
>
> で、改行とついでに前後の空白文字を削除しています。
このパターンでsplitしているということですか?
空行には意味がないのですね。
--
木村浩一
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
mail kbk@...
web www.kt.rim.or.jp/~kbk/index.html#zakkicho
homepage3.nifty.com/farstar/