IƱaki Baz Castillo wrote:
> Could I know why case "b" perform the normal regexp comparission instead 
> of
> invoking the re-defined String#=~ method??

ParseTree gem may help you.

$ cat strange.rb
class String
  def =~ obj
    puts "Sorry, I don't compare"
  end
end

r1 = "string" =~ 1234
r2 = "string" =~ /string/
r3 = "string".send(:"=~", 1234)
r4 = "string".send(:"=~", /string/)

$ parse_tree_show strange.rb
s(:block,
 s(:class,
  :String,
  nil,
  s(:scope,
   s(:defn,
    :=~,
    s(:scope,
     s(:block,
      s(:args, :obj),
      s(:fcall, :puts, s(:array, s(:str, "Sorry, I don't 
compare")))))))),
 s(:lasgn, :r1, s(:call, s(:str, "string"), :=~, s(:array, s(:lit, 
1234)))),
 s(:lasgn, :r2, s(:match3, s(:lit, /string/), s(:str, "string"))),
 s(:lasgn,
  :r3,
  s(:call, s(:str, "string"), :send, s(:array, s(:lit, :=~), s(:lit, 
1234)))),
 s(:lasgn,
  :r4,
  s(:call,
   s(:str, "string"),
   :send,
   s(:array, s(:lit, :=~), s(:lit, /string/)))))
$

You can see that your case (b) is parsed differently as a :match3, 
bypassing the normal method dispatch (:call)
-- 
Posted via http://www.ruby-forum.com/.