Perlのワンライナーでシングルクオテーションをエスケープする
perlのコードで、下記のようにsetterを変換する必要に迫られました。
# このsetterを set_hoge('value'); # こう変換 set('hoge','value');
ちなみに、本来は前者の方がBest Practiceなんでそっちに従いたいですが今回は事情があり後者を選択することになってます。
で、これをワンライナーで置換できないか考えました。まず考えたのがこんなの。
find . -type f -name '*.pm' -print0 | xargs -0 perl -i -pe 's/set_(.*?)\(/set\(\'$1\',/g'
これだと文法エラーになります。どうやら、シングルクオテーションで囲んだ中でエスケープでシングルクオテーションを入れるのは無理みたいです。
色々試行錯誤した結果、カッコ悪いけどこれで回避しました。一度シングルクオテーションにしたいところをsinglequotationという文字列にしてその後singlequotationを'に置換するという力技…。もっとスマートな方法があればどなたか教えてくらはい…
find . -type f -name '*.pm' -print0 | xargs -0 perl -i -pe 's/set_(.*?)\(/set\(singlequotation$1singlequotation,/g' find . -type f -print0 | xargs -0 perl -i -pe s/singlequotation/\'/g;