From: shibata.hiroshi@... Date: 2014-01-30T06:17:19+00:00 Subject: [ruby-core:60332] [ruby-trunk - Feature #8953] `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literal Issue #8953 has been updated by Hiroshi SHIBATA. Target version changed from 2.1.0 to current: 2.2.0 ---------------------------------------- Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literal https://bugs.ruby-lang.org/issues/8953#change-44802 * Author: Goro Fuji * Status: Assigned * Priority: Normal * Assignee: Yukihiro Matsumoto * Category: core * Target version: current: 2.2.0 ---------------------------------------- The expression `a =~ b` does not call the =~ method in some cases. I think it is a bug that results from optimizations. See the following code for details: Code that does not work as expected (shows nothing): $ ruby -e 's = "foo"; class << s; def =~ (rhs); raise "a"; end; end; s =~ /foo/' # does nothing Code that works as expected (raises errors): $ ruby -e 's = "foo"; class << s; def =~ (rhs); raise "a"; end; end; s.=~ /foo/' # call =~ as a method $ ruby -e 's = "foo"; class << s; def =~ (rhs); raise "a"; end; end; s =~ -> { /foo/ }.call' # RHS is not a Regexp literal but a Regexp object $ ruby -e 's = Objec.new; class << s; def =~ (rhs); raise "a"; end; end; s =~ /foo/' # LHS is not a String -- http://bugs.ruby-lang.org/