B::perlstringを使って文字列中のダブルクォートを適切にエスケープする
文字列中にエスケープされていないダブルクォートがあった時に,例えば文字列evalしようとするとずっこける事があります.以下の様な感じ.
なぜ失敗するかというと,eval "$str"
がeval "hel"lo"
という風に評価されてしまうからなんですね.これではlo"
がinvalidになってしまいます.
で,そういう時にどうするかと言うとB::perlstrigですよ!
こうすると動く.
B::perlstring('hel"lo')
という風にしてやると,'hel\"lo'
という風に適切にダブルクォートをエスケープしてくれる訳ですね.
こういう場合「男は黙って正規表現」と思っていましたが,B::perlstringで良い気がしました!
[追記]
文字列evalはあくまで***例***なんで真に受けないで欲しいんですけど,他に良い例が思いつかなかったと言うか,実際のソースとか使い道とか書いてもいいんですけどそれだと異常に長くなるし,だったら面倒だから「単純な」文字列evalで良いやってなって例示しただけなので,まあ色々あります.これが全てでは無い.まれにq{...}
とかやっても無駄な場合もある.そういう時に必要になることがある.
詳しくはLocalizerのソース,特にGettext周りを読めば良いと思いますね!