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
をつけているのがポイント。
ただコレが本当に効率がいいかは不明。テキスト + 配列よりは効率はいいははず自信ないけど。
なんか間違ってたらお知らせください。