関数の結果で置換する
eオプションをつけると置換処理の際に関数を利用できます。
use strict; use warnings; my @items = ( '0: hoge', '1: fuga', '2: piyo', ); foreach my $item (@items) { my $str = $item; # 先頭の数字部分をplus()で処理した結果で置換する $str =~ s/^(\d+)/plus($1)/e; print $str, "\n"; } # 数字を一つ増やす sub plus { my $val = shift; return $val + 1; } __END__ 実行結果 1: hoge 2: fuga 3: piyo無名関数を使って処理することもできます。
use strict; use warnings; my @items = ( '0: hoge', '1: fuga', '2: piyo', ); foreach my $item (@items) { my $str = $item; # 先頭の数字部分を処理した結果で置換する $str =~ s/^(\d+)/sub { $_[0] + 1 }->($1)/e; print $str, "\n"; } __END__ 実行結果 1: hoge 2: fuga 3: piyo