[#20227] dyna_vars problem? — Tanaka Akira <akr@...17n.org>

しばらく前から、稀に Ruby が core を吐くという問題を追いかけているので

15 messages 2003/05/19
[#20234] Re: dyna_vars problem? — matz@... (Yukihiro Matsumoto) 2003/05/19

まつもと ゆきひろです

[#20236] Re: dyna_vars problem? — Tanaka Akira <akr@...17n.org> 2003/05/19

In article <1053363181.529491.30320.nullmailer@picachu.netlab.jp>,

[ruby-dev:20203] [PATCH] String#split("\n")

From: Minero Aoki <aamine@...>
Date: 2003-05-19 04:07:19 UTC
List: ruby-dev #20203
青木です。

String#split の挙動がなんか変です。

  % ruby -e 'p "a\na".split("\n")'
  ["a\na"]

メタキャラクタを含まなければ正しい結果になります。

  % ruby -e 'p "aba".split("b")'
  ["a", "a"]

原因は rb_reg_quote() で、

  rb_reg_quote("\n")  ->  "\\n\n"

となっていることでした。
ついでに言うと以下の変換は意味が変わっているので不適切だと思います。

  rb_reg_quote(" ")  ->  "\s"

以上を修正するパッチを添付します。
-------------------------------------------------------------------
青木峰郎

Index: re.c
===================================================================
RCS file: /home/aamine/var/cvs/ruby/ruby/re.c,v
retrieving revision 1.103
diff -u -p -r1.103 re.c
--- re.c	16 May 2003 23:28:17 -0000	1.103
+++ re.c	19 May 2003 04:05:46 -0000
@@ -1382,24 +1382,24 @@ rb_reg_quote(str)
 	    break;
 	  case ' ':
 	    *t++ = '\\';
-	    *t++ = 's';
-	    break;
+	    *t++ = ' ';
+	    continue;
 	  case '\t':
 	    *t++ = '\\';
 	    *t++ = 't';
-	    break;
+	    continue;
 	  case '\n':
 	    *t++ = '\\';
 	    *t++ = 'n';
-	    break;
+	    continue;
 	  case '\r':
 	    *t++ = '\\';
 	    *t++ = 'r';
-	    break;
+	    continue;
 	  case '\f':
 	    *t++ = '\\';
 	    *t++ = 'f';
-	    break;
+	    continue;
 	}
 	*t++ = c;
     }

In This Thread

Prev Next