関数の結果で置換する
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
