From: wanabe Date: 2008-06-13T00:49:43+09:00 Subject: [ruby-dev:35081] Re: [Bug:1.9] Rational("355/113") clear $& ワナベと申します。 2008/06/09 20:22 Tadayoshi Funaba : >> 以下のように、Rational("355/113") とすると $& が nil になり >> ます。 > > 内部で match をつかってるのが影響していると思いますが、どう対処したら > いいんでしょうね。コンテキストの問題なのか、最初から副作用がないような > 手段をとらないといけないのか。 単純に backref を一時保存・復帰するのはどうでしょうか。 Index: rational.c =================================================================== --- rational.c (revision 17112) +++ rational.c (working copy) @@ -1274,13 +1274,15 @@ static VALUE string_to_r_internal(VALUE self) { - VALUE s, m; + VALUE s, m, backref; s = f_strip(self); if (RSTRING_LEN(s) == 0) return rb_assoc_new(Qnil, self); + backref = rb_backref_get(); + rb_match_busy(backref); m = f_match(rat_pat, s); if (!NIL_P(m)) { @@ -1333,8 +1335,10 @@ if (!NIL_P(de)) v = f_div(v, f_to_i(de)); + rb_backref_set(backref); return rb_assoc_new(v, re); } + rb_backref_set(backref); return rb_assoc_new(Qnil, self); } -- ワナベ