Hatena::ブログ(Diary)

Islands in the byte stream

2009-08-04

A trap with qr/\Q ... \E/xms

qr/\Q $foo \E/xmsと書いたら思ったものにマッチせずハマった。

しばらく頭を抱えていたが,コマンドラインで出力を見ると原因が分かった。正規表現のx修飾子は正規表現内の空白を無視するように指示するものだが,\Qのほうはxの有無にかかわらず常に空白も含めて処理するようだ。つまり,上記の正規表現の内容は$fooの前後に空白(qr{\ })が置かれるのと同じ結果となっていたのだ。したがってこの場合,正解はqr/\Q$foo\E/xmsである。

Chas. OwensChas. Owens 2009/08/05 04:57 Neat, it took me a little while to figure out what this was saying (I do not speak or read Japanese), but once I did I was shocked. I have never noticed the interaction between quotemeta and the /x option before. Thanks.

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/gfx/20090804/1249372753