# Wrapped String#gsub

**URL:** <https://www.ruby-forum.com/t/wrapped-string-gsub/127214>\
**Category:** Development\
**Created:** [January 26, 2008, 11:41am UTC](https://www.ruby-forum.com/t/wrapped-string-gsub/127214 "2008-01-26T11:41:46Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![tisphie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/f07891/32.png) [@tisphie](https://www.ruby-forum.com/u/tisphie)\
**Post date:** [January 26, 2008, 11:41am UTC](https://www.ruby-forum.com/t/wrapped-string-gsub/127214/1 "2008-01-26T11:41:46Z")

</div>

e$B$3$s$K$A$O!"KQe(B e$B\<G0u$G$9!#e(B

e$B\<!$N$h$&$Ke(B gsube$B$r%i%C%T%s%C%0$7$Fe(B  
e$B\<B9T$9$k$H!"$A$g$C$H0U30$J7k2L$,$G$^$9$,!"$4$l$O@5$7$$$G$7$g$&$+!#e(B

e$B4\*0c$$$@$C$?$i$9$\_$^$;$s!#e(B

$ cat test2.rb  
class String  
def wrap\_gsub(\*a, &b)  
self.gsub(\*a, &b)  
puts “in wrapper ? #{$&}”  
end  
end

puts “wrapper”  
“abc”.wrap\_gsub(/([abc]+)/n) {|x| p $&}  
puts “and out of wrapper - #{$&}”  
puts “=======”  
puts “original”  
“abc”.gsub(/([abc]+)/n) {|x| p $&}

e$B7k2L$G$9!#e(B1.8/1.9 e$BF1$8$G$9!#e(B

# $ ruby test2.rb wrapper nil in wrapper ? abc and out of wrapper -

# original “abc” $ ruby --version ruby 1.9.0 (2008-01-22 revision 0) [i686-linux] mithrandir@losrorien ~/Development/ruby-1.8.6 $ ruby18 test2.rb wrapper nil in wrapper ? abc and out of wrapper -

original  
“abc”  
$ ruby18 --version  
ruby 1.8.6 (2007-12-03 patchlevel 113) [i686-linux]

---

<div class="post-metadata">

**Author:** ![tisphie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/f07891/32.png) [@tisphie](https://www.ruby-forum.com/u/tisphie)\
**Post date:** [January 26, 2008, 11:54am UTC](https://www.ruby-forum.com/t/wrapped-string-gsub/127214/2 "2008-01-26T11:54:42Z")

</div>

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

Park Ji-In wrote:

> e$B$3$s$K$A$O!"KQe(B e$B\<G0u$G$9!#e(B
> 
> e$B\<!$N$h$&$Ke(B gsube$B$r%i%C%T%s%C%0$7$Fe(B  
> e$B\<B9T$9$k$H!"$A$g$C$H0U30$J7k2L$,$G$^$9$,!"$4$l$O@5$7$$$G$7$g$&$+!#e(B
> 
> e$B4\*0c$$$@$C$?$i$9$\_$^$;$s!#e(B

e$B@5$7$$$G$9!#e(B

> $ cat test2.rb  
> class String  
> def wrap\_gsub(\*a, &b)  
> self.gsub(\*a, &b)  
> puts “in wrapper ? #{$&}” # \<= e$B$3$l$N7k2L$G$"$ke(B nil e$B$,JV$j$^$9e(B  
> end  
> end

e$B$J$N$G!"e(B

> $ cat test2.rb  
> class String  
> def wrap\_gsub(\*a, &b)  
> self.gsub(\*a, &b)  
> puts “in wrapper ? #{$&}”  
> self  
> end  
> end

e$B$?$H$($P$3$s$J46$8$K$7$^$7$g$&e(B

---

<div class="post-metadata">

**Author:** ![tisphie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/f07891/32.png) [@tisphie](https://www.ruby-forum.com/u/tisphie)\
**Post date:** [January 26, 2008, 12:27pm UTC](https://www.ruby-forum.com/t/wrapped-string-gsub/127214/3 "2008-01-26T12:27:44Z")

</div>

e$BKQe(B e$B\<G0u$G$9!#e(B  
e$B$9$\_$^$;$s!#@bL@$,B-$j$J$+$C$?$N$G?=$7Lu$4$6$$$^$;$s!#e(B

e$B2~$a$F=q$$$F$\_$^$9!#e(B

class String  
def wrap\_gsub(\*a, &b)  
self.gsub(\*a, &b)  
end  
end

puts “wrapper”  
“abc,abc”.wrap\_gsub(/([abc]+)/) { puts $1 }  
puts “original”  
“abc,abc”.gsub(/([abc]+)/) { puts $1 }

– e$B7k2Le(B –

wrapper  
nil  
nil  
original  
“abc”  
“abc”

e$B$G$9!#e(Bgsube$B$re(Bblocke$BIU$-$G8F$V$H$-$O8!:w$G$-$?$b$8$l$D$Oe(B  
$1, $2e$B$J$I$GEO$9$H=q$$$F$"$j$^$7$?!#e(B

e$B$,!"$3$s$JIw$Ke(Bblocke$B$rEO$7$Fe(Bdeligatore$B8+$?$$$J??;w$re(B  
e$B$9$k$3$H$O=PMh$J$$$G$7$g$&$+!#e(B

---

<div class="post-metadata">

**Author:** ![tisphie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/f07891/32.png) [@tisphie](https://www.ruby-forum.com/u/tisphie)\
**Post date:** [January 26, 2008, 1:13pm UTC](https://www.ruby-forum.com/t/wrapped-string-gsub/127214/4 "2008-01-26T13:13:47Z")

</div>

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

Park Ji-In wrote:

> original  
> “abc”  
> “abc”
> 
> e$B$G$9!#e(Bgsube$B$re(Bblocke$BIU$-$G8F$V$H$-$O8!:w$G$-$?$b$8$l$D$Oe(B  
> $1, $2e$B$J$I$GEO$9$H=q$$$F$"$j$^$7$?!#e(B
> 
> e$B$,!"$3$s$JIw$Ke(Bblocke$B$rEO$7$Fe(Bdeligatore$B8+$?$$$J??;w$re(B  
> e$B$9$k$3$H$O=PMh$J$$$G$7$g$&$+!#e(B

e$B$(!\<$C$H!"$?$V$s!"e(B

class String  
def wrap\_gsub(a)  
self.gsub(a){ yield $1}  
end  
end

e$B$H$+e(B

class String  
def wrap\_gsub(\*a)  
self.gsub(\*a)  
end  
end

e$B$G$7$g$&$+!#e(B

---

<div class="post-metadata">

**Author:** ![tisphie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/f07891/32.png) [@tisphie](https://www.ruby-forum.com/u/tisphie)\
**Post date:** [January 26, 2008, 1:51pm UTC](https://www.ruby-forum.com/t/wrapped-string-gsub/127214/5 "2008-01-26T13:51:20Z")

</div>

e$B$3$s$P$s$O!"9uED$R$i$/$H8@$$$^$9!#e(B

e$B%a%=%C%I$KEO$7$?%V%m%C%/$Ne(B$1,  
$2e$B$O!"$=$N%V%m%C%/$r:n$C$?%9%3!\<%W$N$b$N$N$h$&$G$9!#e(B

* * *

#!/usr/bin/ruby  
class String  
def wrap\_gsub(re, &b)  
self=~re # =\>  
e$B$3$N%^%C%A$N%G!\<%?$Oe(Bbe$B$NCf$Ne(B$1e$B$KH?1G$5$l$J$$e(B  
self.gsub(re, &b)  
end  
end

## “abc,abc”=~/([a]+)/ “abc,abc”.wrap\_gsub(/([abc]+)/) { puts $1 } # =\> e$B\>e$N9T$N%^%C%A$N%G!\<%?$,e(B$1e$B$KF~$ke(B

## e$B\<B9T$9$k$He(B

## ~$ ruby -v test.rb ruby 1.8.6 (2007-06-07 patchlevel 36) [i486-linux] a a

e$B$H$J$j$^$9!#e(B

e$B%V%m%C%/$NCf$G%V%m%C%/$r\<B9T$9$k%a%=%C%I$N%^%C%A$N%G!\<%?$r;H$$$?$$\>l9g$G$9$,!"%V%m%C%/$N%Q%i%a!\<%?e(B  
e$B$Ke(B$&e$B$rEO$9$N$O$$$+$,$G$7$g$&$+e(B?

---- e$B%=!\<%9e(B  
#!/usr/bin/ruby  
class String  
def wrap\_gsub2(\*a)  
self.gsub(\*a){yield($~) if block\_given?}  
end  
end

## “abc,abc”.wrap\_gsub2(/(a)(bc)/) {|m| puts m[0], m[1], m[2] }

## ---- e$B=PNOe(B $ ruby -v test.rb ruby 1.8.6 (2007-06-07 patchlevel 36) [i486-linux] abc a bc abc a bc

Park Ji-In e$B$5$s$O=q$-$^$7$?e(B:

---

<div class="post-metadata">

**Author:** ![tisphie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/f07891/32.png) [@tisphie](https://www.ruby-forum.com/u/tisphie)\
**Post date:** [January 27, 2008, 6:17am UTC](https://www.ruby-forum.com/t/wrapped-string-gsub/127214/6 "2008-01-27T06:17:20Z")

</div>

e$BKQe(B e$B\<G0u$G$9!#e(B

2008/1/26, KURODA Hiraku [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> “abc,abc”.wrap\_gsub2(/(a)(bc)/) {|m| puts m[0], m[1], m[2] }

e$B2?$+$d$d$3$7$/\<j$rF~$i$J$1$l$P$J$i$J$$$h$&$G$9$M!#e(B  
e$B$=$l$,=PMh$k;~$O$=$l$GNI$$$H;W$$$^$9$,!"e(B

DelegateClasse$B$bF1$87k2L$,$G$^$7$?!#e(B

require ‘delegate’

class Merong \< DelegateClass(String)  
def initialize(str)  
@mystr = str  
super(@mystr)  
end  
end

m = Merong.new(‘abc’)  
s = m.gsub(/([abc]+)/) {$1.upcase}  
puts s

e$B7k2Le(B

(eval):3:in ` __send__': undefined method `upcase’ for nil:NilClass  
(NoMethodError)  
from (eval):3:in `gsub’  
from delegate\_test.rb:11

e$B$3$l$O%P%0$@$HG’$a$i$l$k$G$7$g$&$+!#e(B
