e$B@.@%$G$9!#e(B
Ruby e$B%9%l%C%I$G=P$F$$$?OCBj$J$N$G$9$,!“8=:_$Ne(B String#gsub
e$B$,%V%m%C%/$r<ue(B
e$B$1<h$C$?;~!”%V%m%C%/$K$Oe(B $& e$B$,EO$5$l$F$$$^$9!#e(B
“abcdefg”.gsub(/(.).(.)/){|m|p m; m}
“abc”
“def”
=> “abcdefg”
e$B$3$l$@$H!";ve%V%m%C%/%Q%i%a!<%?$O;H$$J*$K$J$i$J$$$N$G!"e(BMatchData
e$B$rEOe(B
e$B$9$h$&$K$7$^$;$s$+!#e(B
“abcdefg”.gsub(/(.).(.)/){|m|p m; m}
#<MatchData “abc” 1:“a” 2:“c”>
#<MatchData “def” 1:“d” 2:“f”>
=> “abcdefg”
e$B5$$K$J$k$N$O8_49@-$G$9$,e(B m.to_s e$B$Oe(B e$B:#$^$G$Ne(B $&
e$B$H0lCW$9$k$N$G!“e(B
“abcdefg”.gsub(/(.).(.)/){|m| m+”,"} e$B$O$5$9$,$K%(%i!<$,=P$^$9$,!"e(B
“abcdefg”.gsub(/(.).(.)/){|m| “%s,” % m}
e$B$J$i:#$^$GDL$jF0$-$^$9$7!“e(B
e$B$=$b$=$b$*$=$i$/$[$H$s$I$N8=:_$N%3!<%I$O!“e(B
“abcdefg”.gsub(/(.).(.)/){$&+”,”} e$B$G$7$g$&!#e(B
— string.c (revision 15354)
+++ string.c (working copy)
@@ -2739,7 +2739,7 @@ rb_str_sub_bang(int argc, VALUE *argv, V
char *p = RSTRING_PTR(str); long len = RSTRING_LEN(str);
rb_match_busy(match);
-
repl = rb_obj_as_string(rb_yield(rb_reg_nth_match(0,
match)));
-
repl = rb_obj_as_string(rb_yield(match)); str_mod_check(str, p, len); str_frozen_check(str); rb_backref_set(match);
@@ -2876,7 +2876,7 @@ str_gsub(int argc, VALUE *argv, VALUE st
regs = RMATCH(match)->regs;
if (iter) {
rb_match_busy(match);
-
val = rb_obj_as_string(rb_yield(rb_reg_nth_match(0,
match)));
-
val = rb_obj_as_string(rb_yield(match)); str_mod_check(str, sp, slen); if (bang) str_frozen_check(str); if (val == dest) { /* paranoid check [ruby-dev:24827] */