[#30220] schedule for Ruby 1.8.6 — "Akinori MUSHA" <knu@...>

 ruby-core を読んでいない人もいると思うので、ここでもアナウンス

20 messages 2007/01/30

[ruby-dev:30212] Re: String#sub!{...}

From: "U.Nakamura" <usa@...>
Date: 2007-01-29 16:35:52 UTC
List: ruby-dev #30212
こんにちは、なかむら(う)です。

In message "[ruby-dev:30211] String#sub!{...}"
    on Jan.30,2007 00:59:52, <[email protected]> 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 <[email protected]>



In This Thread