# Block parameter of String#gsub

**URL:** <https://www.ruby-forum.com/t/block-parameter-of-string-gsub/127668>\
**Category:** Development\
**Created:** [January 31, 2008, 7:50am UTC](https://www.ruby-forum.com/t/block-parameter-of-string-gsub/127668 "2008-01-31T07:50:38Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![NARUSES\_Yui](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/258eb7/32.png) [@NARUSES\_Yui](https://www.ruby-forum.com/u/NARUSES_Yui)\
**Post date:** [January 31, 2008, 7:50am UTC](https://www.ruby-forum.com/t/block-parameter-of-string-gsub/127668/1 "2008-01-31T07:50:38Z")

</div>

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!";v**e%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] */
```

---

<div class="post-metadata">

**Author:** ![NARUSES\_Yui](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/258eb7/32.png) [@NARUSES\_Yui](https://www.ruby-forum.com/u/NARUSES_Yui)\
**Post date:** [January 31, 2008, 3:33pm UTC](https://www.ruby-forum.com/t/block-parameter-of-string-gsub/127668/2 "2008-01-31T15:33:38Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:33548] block parameter of String#gsub”  
on Thu, 31 Jan 2008 15:49:51 +0900, “NARUSE, Yui”  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|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

|e$B$3$l$@$H!";v**e%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**

 

e$B$3$l$O5$$K$7$F$$$?$N$G$9$,!“8\_49@-$N$3$H$,$”$k$N$Gm4m0$7$F$$e(B  
e$B$^$7$?!#e(B

|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

e$B$&!\<$s!“$=$3$^$G3d$j@Z$l$k$N$+$J$”!#B\>$N?M$N0U8+$rJ9$-$?$$$He(B  
e$B$3$m$G$9!#e(B

e$B;d$,9M$($F$$$?e(B(e$B$1$I!“e(B1.9.0e$B$K$O4V$K9g$o$J$+$C$?e(B)e$B%”%$%G%#%"$O!"e(B  
sube$B$KBP1~$9$ke(Bse$B!“e(Bgsube$B$KBP1~$9$ke(Bsg(e$B$^$?$Oe(Bgs)e$B%a%=%C%I$re(BStringe$B%/e(B  
e$B%i%9$K?7@\_$7!”$3$A$i$G$Oe(BMatchDatae$B$rM?$($k$H$$$&$b$N$G$9!#e(B

e$B$I$&$$$&$N$,NI$$$G$7$g$&$M!#e(B

```
                            e$B$^$D$b$He(B e$B$f$-$R$me(B /:|)

```

---

<div class="post-metadata">

**Author:** ![NARUSES\_Yui](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/258eb7/32.png) [@NARUSES\_Yui](https://www.ruby-forum.com/u/NARUSES_Yui)\
**Post date:** [January 31, 2008, 5:53pm UTC](https://www.ruby-forum.com/t/block-parameter-of-string-gsub/127668/3 "2008-01-31T17:53:13Z")

</div>

e$B@.@%$G$9!#e(B

Yukihiro M. wrote:

> e$B$3$m$G$9!#e(B
> 
> e$B;d$,9M$($F$$$?e(B(e$B$1$I!“e(B1.9.0e$B$K$O4V$K9g$o$J$+$C$?e(B)e$B%”%$%G%#%"$O!"e(B  
> sube$B$KBP1~$9$ke(Bse$B!“e(Bgsube$B$KBP1~$9$ke(Bsg(e$B$^$?$Oe(Bgs)e$B%a%=%C%I$re(BStringe$B%/e(B  
> e$B%i%9$K?7@\_$7!”$3$A$i$G$Oe(BMatchDatae$B$rM?$($k$H$$$&$b$N$G$9!#e(B

e$B$\*$)!"$=$l$O$$$$$H;W$$$^$9!#e(B  
String#scan e$B$N%V%m%C%/%Q%i%a!\<%?$Ne(B  
MatchDatae$BHG$bJ;$;$F$[$7$$$G$9$M!#e(B  
s, sg, sc e$B$@$H$=$3$O$+$H$J$/6&DL@-$b$"$k!&!&!&$+$b!#e(B

---

<div class="post-metadata">

**Author:** ![NARUSES\_Yui](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/258eb7/32.png) [@NARUSES\_Yui](https://www.ruby-forum.com/u/NARUSES_Yui)\
**Post date:** [February 1, 2008, 4:35am UTC](https://www.ruby-forum.com/t/block-parameter-of-string-gsub/127668/4 "2008-02-01T04:35:38Z")

</div>

e$BA0ED$G$9!#e(B

On 01/31/08 23:32, Yukihiro M. wrote:

> |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
> 
> e$B$&!\<$s!"$=$3$^$G3d$j@Z$l$k$N$+$J$"!#B\>$N?M$N0U8+$rJ9$-$?$$$He(B  
> e$B$3$m$G$9!#e(B

e$B8D?ME\*$K$Oe(Bstr.gsub(/[A-Z]/) {|s| "_" +  
s.downcase}e$B$_$?$$$J%3!\<%I$Oe(B  
e$B7k9==q$$$F$^$9$M!#e(B  
grep 'gsub.\*{  
\*|'e$B$H$+$7$F$\_$k$H!“I8=`E:IU%i%$%V%i%j$K$b$$$/$D$+F0$+e(B  
e$B$J$/$J$k%3!\<%I$,$”$j$=$&$G$9!#e(B

> e$B;d$,9M$($F$$$?e(B(e$B$1$I!“e(B1.9.0e$B$K$O4V$K9g$o$J$+$C$?e(B)e$B%”%$%G%#%"$O!"e(B  
> sube$B$KBP1~$9$ke(Bse$B!“e(Bgsube$B$KBP1~$9$ke(Bsg(e$B$^$?$Oe(Bgs)e$B%a%=%C%I$re(BStringe$B%/e(B  
> e$B%i%9$K?7@\_$7!”$3$A$i$G$Oe(BMatchDatae$B$rM?$($k$H$$$&$b$N$G$9!#e(B

se$B$de(Bsge$B$@$H$A$g$C$HC;$+$9$.$^$;$s$+e(B?

---

<div class="post-metadata">

**Author:** ![NARUSES\_Yui](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/258eb7/32.png) [@NARUSES\_Yui](https://www.ruby-forum.com/u/NARUSES_Yui)\
**Post date:** [February 1, 2008, 4:47am UTC](https://www.ruby-forum.com/t/block-parameter-of-string-gsub/127668/5 "2008-02-01T04:47:59Z")

</div>

e$B1sF#$H?=$7$^$9!#e(B

08/02/01 e$B$Ke(B NARUSE, Yui[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
e$B$5$s$O=q$-$^$7$?e(B:

> > |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

e$B$=$l$r8@$C$A$c$&$H!“e(BMatchData  
e$B$,$[$7$$$H$-$N8=:\_$N%3!\<%I$@$C$Fe(B  
“abcdefg”.gsub(/(.).(.)/){$1+”,“+$2}  
e$B$J$N$G!”;EMM$rJQ$($kM}M3$H$7$F$O\<e$$$H;W$$$^$7$?!#e(B

e$BLdBj$O$d$O$j85$N%9%l%C%I$K$"$C$?$h$&$K!“e(Bscan e$B$He(B gsub  
e$B$N%V%m%C%/e(B  
e$B%Q%i%a!\<%?$,0[$J$C$F$$$F$o$+$j$K$/$$E@$@$H;W$$$^$9!#$I$&$;;EMM$re(B  
e$BJQ$($k$J$i$Pe(B MatchData  
e$B$K$=$m$($A$c$\*$&!”$H$$$&$N$O;?@.$G$9!#e(B

> > e$B;d$,9M$($F$$$?e(B(e$B$1$I!“e(B1.9.0e$B$K$O4V$K9g$o$J$+$C$?e(B)e$B%”%$%G%#%"$O!"e(B  
> > sube$B$KBP1~$9$ke(Bse$B!“e(Bgsube$B$KBP1~$9$ke(Bsg(e$B$^$?$Oe(Bgs)e$B%a%=%C%I$re(BStringe$B%/e(B  
> > e$B%i%9$K?7@\_$7!”$3$A$i$G$Oe(BMatchDatae$B$rM?$($k$H$$$&$b$N$G$9!#e(B
> 
> e$B$\*$)!“$=$l$O$$$$$H;W$$$^$9!#e(B  
> String#scan e$B$N%V%m%C%/%Q%i%a!\<%?$Ne(B MatchDatae$BHG$bJ;$;$F$[$7$$$G$9$M!#e(B  
> s, sg, sc e$B$@$H$=$3$O$+$H$J$/6&DL@-$b$”$k!&!&!&$+$b!#e(B

e$B@T?qH?\<M$G!V5-9f2=$7$9$.!W$HH?BP$7$?$/$J$j$^$7$?$,!"$=$l0J30$Ne(B  
e$BH?BPM}M3$O;W$$$D$-$^$;$s$G$7$?!#5U$K;?@.M}M3$Oe(B

- unix e$BJ82=$G$O!Ve(Bs e$B0lJ8;ze(B =  
e$BCV49!W$H$$$&%3%s%;%s%5%9$,$"$k$+$be(B
- String e$B$N%$%s%9%?%s%9%a%=%C%I$@$+$i%0%m!\<%P%k$K$O1F6A$,$J$$e(B
- e$B85$Ne(B sub e$B$de(B gsub  
e$B$@$C$FL\>A0$r8+$?$@$1$8$c0UL#$,$o$+$i$J$$e(B
- e$BHs8\_49$G$O$J$/?75!G=$J$N$G:#$+$i$G$bF2!9$H$d$l$ke(B

e$B$H!"$$$C$Q$$;W$$$D$-$^$7$?!#e(B

e$B$H$O$$$(!“e(BPerl e$B$,$$$d$Ge(B Ruby e$B%f!\<%6$K$J$C$??M!9e(B  
(e$B4^$`;de(B) e$B$O2a\>j$Je(B  
e$B5-9f2=$K$ODq93$,$”$k$H;W$$$^$9!#e(B  
e$B;d$N0u\>]$O!“!Ve(Bgsub e$B$,FsJ8;z$K$J$k2ACM$O$”$k$+$bCN$l$J$$$1$Ie(B  
sub e$B$,e(B  
e$B0lJ8;z$K$J$k$[$I$N2ACM$O46$8$J$$!W$H$$$&46$8$G$9!#e(B

---

<div class="post-metadata">

**Author:** ![NARUSES\_Yui](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/258eb7/32.png) [@NARUSES\_Yui](https://www.ruby-forum.com/u/NARUSES_Yui)\
**Post date:** [February 1, 2008, 5:04am UTC](https://www.ruby-forum.com/t/block-parameter-of-string-gsub/127668/6 "2008-02-01T05:04:24Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:33557] Re: block parameter of String#gsub”  
on Fri, 1 Feb 2008 12:34:34 +0900, Shugo M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|\> e$B;d$,9M$($F$$$?e(B(e$B$1$I!“e(B1.9.0e$B$K$O4V$K9g$o$J$+$C$?e(B)e$B%”%$%G%#%"$O!"e(B  
|\> sube$B$KBP1~$9$ke(Bse$B!“e(Bgsube$B$KBP1~$9$ke(Bsg(e$B$^$?$Oe(Bgs)e$B%a%=%C%I$re(BStringe$B%/e(B  
|\> e$B%i%9$K?7@\_$7!”$3$A$i$G$Oe(BMatchDatae$B$rM?$($k$H$$$&$b$N$G$9!#e(B  
|  
|se$B$de(Bsge$B$@$H$A$g$C$HC;$+$9$.$^$;$s$+e(B?

e$B$=$&$+$b$7$l$^$;$s!#$?$@!“e(Bakre$BM}O@$K$h$k$H$h$jK\>$^$7$$J}$rC;e(B  
e$B$/$9$kJ}$,NI$$$o$1$G!#$h$jNI$$L\>A0$NDs0F$,$”$l$P4?7^$7$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![NARUSES\_Yui](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/258eb7/32.png) [@NARUSES\_Yui](https://www.ruby-forum.com/u/NARUSES_Yui)\
**Post date:** [February 2, 2008, 8:11am UTC](https://www.ruby-forum.com/t/block-parameter-of-string-gsub/127668/7 "2008-02-02T08:11:00Z")

</div>

In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
Yukihiro M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> e$B$=$&$+$b$7$l$^$;$s!#$?$@!“e(Bakre$BM}O@$K$h$k$H$h$jK\>$^$7$$J}$rC;e(B  
> e$B$/$9$kJ}$,NI$$$o$1$G!#$h$jNI$$L\>A0$NDs0F$,$”$l$P4?7^$7$^$9!#e(B

e$B:#2s$N\>l9g!"C;$/$9$kI,MW$O$J$/$F!"D9$/$J$1$l$P=\<J,$@$H;W$$$^e(B  
e$B$9!#e(B

MatchData e$B$G$"$k$3$H$N;H$$$d$9$5\<+?H$K$h$kM6F30J\>e$K0U?^E\*$Ke(B  
e$BM6F3$9$kI,MW@-$O$J$$$s$8$c$J$$$G$7$g$&$+!#:#$Ne(B sub, gsub e$B$Ge(B  
e$B$b$H$/$KLdBj$,H/@8$7$d$9$$$H$$$&$3$H$O$J$$$G$9$7!#e(B

s, sg, gs e$B$OA@$C$F$$$k$3$H$KHf$Y$FC;$/$7$9$.$F$$$F!"e(B  
MatchData e$B$K$h$j2r7h$9$kLdBj$KHf$Y$FL\>A0$N$o$+$j$K$/$5$NLdBje(B  
e$B$NEY9g$N$[$&$,Bg$-$/$J$C$F$$$k$h$&$K;W$$$^$9!#e(B

e$B$^$!!“$`$7$m!”$$$$L\>A0$,8+$D$+$i$J$$7k2L!“7k6Ie(B gsub, sub e$B$re(B  
e$B$”$($FHs8\_49$KJQ99$9$k$N$,e(B Ruby e$B$C$]$$$H$$$&5$$b$7$^$9$,!#$be(B  
e$B$7Hs8\_49@-$KBQ$($i$l$k$N$G$"$l$P!“3P$($k$3$H$NNL$,A}$($J$$$He(B  
e$B$$$&MxE@$,$”$j$^$9$7!#e(B

---

<div class="post-metadata">

**Author:** ![NARUSES\_Yui](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/258eb7/32.png) [@NARUSES\_Yui](https://www.ruby-forum.com/u/NARUSES_Yui)\
**Post date:** [February 2, 2008, 8:36am UTC](https://www.ruby-forum.com/t/block-parameter-of-string-gsub/127668/8 "2008-02-02T08:36:13Z")

</div>

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

From: Tanaka A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Subject: [ruby-dev:33568] Re: block parameter of String#gsub  
Date: Sat, 2 Feb 2008 16:10:18 +0900  
Message-ID: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> MatchData e$B$G$"$k$3$H$N;H$$$d$9$5\<+?H$K$h$kM6F30J\>e$K0U?^E\*$Ke(B  
> e$BM6F3$9$kI,MW@-$O$J$$$s$8$c$J$$$G$7$g$&$+!#:#$Ne(B sub, gsub e$B$Ge(B  
> e$B$b$H$/$KLdBj$,H/@8$7$d$9$$$H$$$&$3$H$O$J$$$G$9$7!#e(B
> 
> s, sg, gs e$B$OA@$C$F$$$k$3$H$KHf$Y$FC;$/$7$9$.$F$$$F!"e(B  
> MatchData e$B$K$h$j2r7h$9$kLdBj$KHf$Y$FL\>A0$N$o$+$j$K$/$5$NLdBje(B  
> e$B$NEY9g$N$[$&$,Bg$-$/$J$C$F$$$k$h$&$K;W$$$^$9!#e(B

(e$B%%=%C$He(B) subm, gsubm e$B$H$+!%!%!%e(B  
e$B%4%a%s%J%5%$!%;d$K$OL\>A0$N%;%s%9$,$"$j$^$;$s!%e(B(^\_^;
