From: "U.Nakamura" Date: 2007-01-30T01:35:52+09:00 Subject: [ruby-dev:30212] Re: String#sub!{...} こんにちは、なかむら(う)です。 In message "[ruby-dev:30211] String#sub!{...}" on Jan.30,2007 00:59:52, wrote: | などと色々試していて、sub!の中でのマッチ(//=~s)後に | 文字列が長くなっているとおかしくなっているように | 見えます。 | | というわけで、最小はこのくらいになりそうです。 | | >> (s='').sub!(//){//=~s;'a'};s.scan(/./m) | => [""] s.scan(/./) でいけますね。 というのはどうでもよくて、こんな感じでしょうか? Index: string.c =================================================================== --- string.c (revision 11577) +++ string.c (working copy) @@ -1966,7 +1966,6 @@ pat = get_pat(argv[0], 1); if (rb_reg_search(pat, str, 0, 0) >= 0) { - rb_str_modify(str); match = rb_backref_get(); regs = RMATCH(match)->regs; @@ -1982,6 +1981,7 @@ else { repl = rb_reg_regsub(repl, str, regs); } + rb_str_modify(str); if (OBJ_TAINTED(repl)) tainted = 1; plen = END(0) - BEG(0); if (RSTRING(repl)->len > plen) { それでは。 -- U.Nakamura