「Perlで関数呼び出しする正規表現」を勝手に添削

user.home-info.postal.nameというのを、userHomeInfoPostalNameという感じに一括変換したいなっと思い考える。

$ perl -pe 'sub convert{uc $1;};s/\.([a-z])/&convert($1)/eg;s/-([a-z])/&convert($1)/eg;' 
という感じでいいみたい。

プログラム中に2箇所出てくる正規表現

qr/\.([a-z])/
qr/-([a-z])/

と、ほとんど同じなので

qr/[.-]([a-z])/

のようにまとめることができます。
文字クラス([...])の中では、"."は特別な意味を持たないのでエスケープは不要です。

また、eオプションは置換文字列部分に処理を直接書けるので、(何か事情があるのでなければ)サブルーチンを用意しなくても大丈夫です。


なので、

% perl -pe 's/[.-]([a-z])/uc $1/eg'

で良いと思います。


% echo user.home-info.postal.name | perl -pe 'sub convert{uc $1;};s/\.([a-z])/&convert($1)/eg;s/-([a-z])/&convert($1)/eg;'
userHomeInfoPostalName

% echo user.home-info.postal.name | perl -pe 's/[.-]([a-z])/uc $1/eg'
userHomeInfoPostalName