新井です。

>>> From: Kazuhiro Nishiyama <nishiyama / mx1.tiki.ne.jp>
>>> Date: 14 Nov 1999 23:17:50 +0900
>>> Subject: [ruby-list:18582] Regexp source

> こんばんは、ZnZです。
> 
> 正規表現をテキストファイルに保存するのにsourceだとまずいのでしょうか?
> 以下のようにどんどん長くなっていってしまいます。

なんかバグっぽいですね。でしゃばってパッチ作りました。

--- re.c.org	Sat Oct 16 00:02:56 1999
+++ re.c	Mon Nov 15 04:50:33 1999
@@ -260,10 +260,7 @@
 rb_reg_source(re)
     VALUE re;
 {
-    VALUE str = rb_str_new(0,0);
-    rb_reg_expr_str(str, RREGEXP(re)->str,RREGEXP(re)->len);
-
-    return str;
+    return rb_str_new(RREGEXP(re)->str,RREGEXP(re)->len);
 }
 
 static VALUE

> また/#{a}/の結果がRegexp.new(a)の結果と違います。
> 変数をa,b,c,dと順番に変えていったときはRegexp.newと同じ結果になりました。
> なぜなのでしょうか?

これは単に使う変数を間違えてます、、よね?

> p a = '[/]'    # "[/]"
> p b = /#{a}/   # /[\/]/
> p b === '\\'   # nil
> 
> p a = b.source # "[\\/]"
> p b = /#{a}/   # /[\\/]/
> p a === '\\'   # nil			<- b ===
> 
> p a = b.source # "[\\\\/]"
> p b = /#{a}/   # /[\\\/]/
> p a === '\\'   # false		<- b ===
> 
> p a = b.source # "[\\\\\\/]"
> p b = /#{a}/   # /[\\\\/]/
> p a === '\\'   # false		<- b ===
> 
> p a = '[/]'         # "[/]"
> p b = Regexp.new(a) # /[\/]/
> p b === '\\'        # nil
> 
> p a = b.source      # "[\\/]"
> p b = Regexp.new(a) # /[\\/]/
> p b === '\\'        # nil
> 
> p a = b.source      # "[\\\\/]"
> p b = Regexp.new(a) # /[\\\/]/
> p b === '\\'        # 0
> 
> p a = b.source      # "[\\\\\\/]"
> p b = Regexp.new(a) # /[\\\\/]/
> p b === '\\'        # 0

--
新井康司 (Koji Arai)