文字列内の数値部分を正規表現を使ってインクリメントする

perlを使って行う例。


置換対象のテキストデータ
target.txt

columnIndex1 = "aaa";
columnIndex2 = "bbb";
columnIndex3 = "ccc";

replace.pl

my $data = `cat target.txt`;
$data =~ s/columnIndex([\d]+)/columnIndex@{[$1+1]}/g;
print $data;

実行結果

columnIndex2 = "aaa";
columnIndex3 = "bbb";
columnIndex4 = "ccc";


ファイルに出力

my $data = `cat target.txt`;
$data =~ s/columnIndex([\d]+)/columnIndex@{[$1+1]}/g;

open(OUT, ">", "target2.txt");
print OUT $data;
close(OUT);



以上。
なんだけど @{[$1+1]} の部分が何をやってるのかよくわからないので調べた。


$1+1
文字列+数値だが「+」演算子使っているので数値と判断される。


[$1+1]
[ ] で囲むことで無名配列を作成し、そのリファレンスが返る。


@{[$1+1]}
@{ } で囲むことで配列のリファレンスから配列を取り出すデリファレンスを行う。


ってことかな。。



参考:
Perlの配列とハッシュを自由に扱う - サンプルコードによるPerl入門
http://d.hatena.ne.jp/perlcodesample/20100930/1278596435
ヒアドキュメントの中でPerlの式を書く
http://perl-users.jp/articles/advent-calendar/2008/14.html