# Stuff method

**URL:** <https://www.ruby-forum.com/t/stuff-method/126999>\
**Category:** Ruby\
**Created:** [January 24, 2008, 1:23am UTC](https://www.ruby-forum.com/t/stuff-method/126999 "2008-01-24T01:23:16Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![cgramona](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f05b48/32.png) [@cgramona](https://www.ruby-forum.com/u/cgramona)\
**Post date:** [January 24, 2008, 1:23am UTC](https://www.ruby-forum.com/t/stuff-method/126999/1 "2008-01-24T01:23:16Z")

</div>

Hi,

I missed the stuff function or method found in some languages so I added  
this method to my Helpers mixin.

def stuff(str, substr, rplstr, prefix = ‘._’)  
r1 = Regexp.new("(#{prefix})(#{substr})(._)")  
str.gsub(r1,’\1’+rplstr+’\3’)  
end

puts stuff(‘012-014640-001’,’-.’,’-X’)

This works but if you know a better way please share so I can learn.

In particular it would be nicer I think if it worked like this:

new\_str = ‘012-014640-001’.stuff(’-.’,’-X’)

Thanks,  
Carl

---

<div class="post-metadata">

**Author:** ![cgramona](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f05b48/32.png) [@cgramona](https://www.ruby-forum.com/u/cgramona)\
**Post date:** [January 24, 2008, 1:37am UTC](https://www.ruby-forum.com/t/stuff-method/126999/2 "2008-01-24T01:37:29Z")

</div>

On Jan 23, 2008 7:23 PM, Carl G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> puts stuff(‘012-014640-001’,‘-.’,‘-X’)
> 
> This works but if you know a better way please share so I can learn.
> 
> In particular it would be nicer I think if it worked like this:
> 
> new\_str = ‘012-014640-001’.stuff(‘-.’,‘-X’)
> 
> Try this if you want it to work like above. You should always be careful  
> when modifying core classes, yada yada yada…

class String  
def stuff(substr, rplstr, prefix = ‘._')  
r1 = Regexp.new("(#{prefix})(#{substr})(._)")  
self.gsub(r1,’\1’+rplstr+‘\3’)  
end  
end

Michael G.

---

<div class="post-metadata">

**Author:** ![cgramona](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f05b48/32.png) [@cgramona](https://www.ruby-forum.com/u/cgramona)\
**Post date:** [January 24, 2008, 1:56am UTC](https://www.ruby-forum.com/t/stuff-method/126999/3 "2008-01-24T01:56:18Z")

</div>

Michael G. wrote:

> On Jan 23, 2008 7:23 PM, Carl G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > puts stuff(‘012-014640-001’,‘-.’,‘-X’)
> > 
> > This works but if you know a better way please share so I can learn.
> > 
> > In particular it would be nicer I think if it worked like this:
> > 
> > new\_str = ‘012-014640-001’.stuff(‘-.’,‘-X’)
> > 
> > Try this if you want it to work like above. You should always be careful  
> > when modifying core classes, yada yada yada…
> 
> class String  
> def stuff(substr, rplstr, prefix = ‘._')  
> r1 = Regexp.new("(#{prefix})(#{substr})(._)")  
> self.gsub(r1,’\1’+rplstr+‘\3’)  
> end  
> end
> 
> Michael G.

Thanks Michael!

I guess the use of self is because gsub is itself a member of String.  
Just out of curiosity I wonder if I can use  
String.gsub(r1,‘\1’+rplstr+‘\3’) as well - but even should that work I’m  
sure it is unorthodox.

Carl

---

<div class="post-metadata">

**Author:** ![cgramona](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f05b48/32.png) [@cgramona](https://www.ruby-forum.com/u/cgramona)\
**Post date:** [January 24, 2008, 4:22am UTC](https://www.ruby-forum.com/t/stuff-method/126999/4 "2008-01-24T04:22:58Z")

</div>

Carl G. wrote:

> puts stuff(‘012-014640-001’,’-.’,’-X’)
> 
> This works but if you know a better way please share so I can learn.
> 
> In particular it would be nicer I think if it worked like this:
> 
> new\_str = ‘012-014640-001’.stuff(’-.’,’-X’)

How about:

s = ‘012-014640-001’  
puts s.gsub(/(._)-.(._)/, “\1-X\2”)  
puts s.gsub(/(._)-.(._)/) { “#{$1}-X#{$2}” }
