Perlで文字列を一行ずつ処理する方法を考えてみた。
Perlで文字列を一行ずつ処理するには、
my $str = '複数行のテキスト';
my @lines = split m{\n}, $str;
foreach my $line ( @lines ) {
# 一行ずつ処理
}
というのが考えられる。
ただコレだとテキストを配列にしているため テキスト + 配列分のメモリを使う。 なのでちょっと効率が悪い。(ような気がする)
で、別の方法を考えてみて、置換演算子s///を使えばいいんじゃないかと思った。
my $str = '複数行のテキスト';
$str =~ s/^\s*|\s*$//gs;
$str .= "\n";
$str =~ s{^(.*)\n}{
# 一行ずつ処理
}egm;
コレでできるはず。はずと言ってるのは実際にテストしてないから。
置換演算子s///に修飾子egmをつけているのがポイント。
ただコレが本当に効率がいいかは不明。テキスト + 配列よりは効率はいいはず。 自信ないけど。
なんか間違ってたらお知らせください。