# で始まるコメント行は分離せず、要素1個の配列として返します。
sub log_split{ my $str = $_[0]; my @ret = (); if($str =~ /^#/){ $ret[0] = $str; return @ret; } my @replace = (); my $counter = 0; while($str =~ /^([^"]*?)"(.+?)"(.*)$/){ $str = $1."__リプレ_${counter}__".$3; $replace[$counter] = $2; $counter++; } @ret = split(/ +/,$str); my $j=0; for(my $i=0;$i<$counter;$i++){ for(;$j<=$#ret;$j++){ if($ret[$j] eq "__リプレ_${i}__"){ $ret[$j] = $replace[$i]; last; } } } return @ret; }使い方
my $file = "squid.log"; open my $fh, "<$file"; while(<$fh>){ my @elements = &log_split($_); } close $fh;