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

読了まで:約0分


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

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

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

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。