関数の結果で置換する


 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

関連項目

s置換演算子