Perlのワンライナーでリテラルのシングルクォートが入った正規表現

置換する文字列にシングルクオートとドル記号があったため手こずりました:

どういう置換をしたいか?

置換前の文字列:

['align' => $hoge]

置換後の文字列:

['align' => $foo]

僕が書いた正規表現(間違い)

perl -pi -e 's/\[\'align\' => \$hoge\]/\[\'align\' => \$foo\]/' *

動くが(美しくない)正規表現

perl -pi -e 's/\['\''align'\'' => \$hoge\]/\['\''align'\'' => \$foo\]/' *

シングルクオートをエスケープする際、\'としていてはダメで'\''とする必要がありました。 シェルがシングルクォートを解釈してしまうのですね。

実験

echo ''\''align'\'''
# 'align'と出力される

echo '\'align\''
# コマンドが実行されない