暗黙の $_

以下の式の結果は、/foobar/ ではなく nil になります。*1 *2 *3 *4

nil || /foobar/    #=> nil

これは、「条件式に単体の正規表現リテラルだけを書くと$_との正規表現マッ チを行う」というルールがあるためです。つまり、上記の式は

nil || /foobar/ =~ $_

のように解釈されています。

これを避けるには現状

nil || Regexp.new("foobar")

のように単体の正規表現リテラルを書かないようにするしか方法がありません。

論理演算子式の項に現れた正規表現リテラルの特殊解釈はなくす方向で検討さ れています[ruby-list:30836]


*1$_ に foobar が含まれていた場合は?
*2あらい 2001-10-07: 下でどう解釈されているか説明されてるから わかりますよね?ダメ?あんまりくどいのも嫌でしょう?
*3実際の挙動はその解釈とは異なる
*4あらい 2001-10-07: ?ごめんもっとわかりやすく



rubyist ML