A Day in the Life

String を継承したクラスでのブロック内部の正規表現後方参照の挙動

String を継承したクラスでのブロック内部の正規表現後方参照の挙動

class MyString < String
  def gsub(*args, &block)
    super
  end
end

puts String.new('123').gsub(/(\d)/) { $1 } #=> 123
puts MyString.new('123').gsub(/(\d)/) { $1 } #=> 333

えっ…。ruby 1.8.7 p334 と ruby 1.9.2 p180 で確認。Ruby コードレベルでどうにか解消できるのかなぁ。

Rails 2.3 でも Rails 3.0 でも ActiveSupport::SafeBuffer(Stringを継承したクラス) な文字列で問題が発生している。