カラクリスタ

『輝かしい青春』なんて失かったヒトのブログ

Perlで文字列を一行ずつ処理する方法

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をつけているのがポイント。

ただコレが本当に効率がいいかは不明。テキスト + 配列よりは効率はいいはず。 自信ないけど。

なんか間違ってたらお知らせください。