On Jul 19, 8:59 pm, "Michael W. Ryder" <_mwry... / worldnet.att.net> wrote: > I was trying to come up with a way to remove x instances of a character > from a string and came up with a problem. If I enter: > > a = "a b c d e f" > for i in 1..3 > a = a.sub!(' ', '') > end > puts a ==> returns 'abcd e f' which is correct. > > But if I enter: > > a = "a b c d e f" > for i in 1..10 > a = a.sub!(' ', '') > end > puts a ==> returns error.rb:3: private method `sub!' called for > nil:NilClass (NoMethodError, and a is now nil. > > What I am looking for is a way to remove the first n instances of a > blank from the string without wiping out the string if it does not > contain at least n blanks. I assume there is a way to do this with > regular expressions, but have not found it yet. This is something an > editor I liked, UCEDIT, on the CDC Cyber had in the 70's. sub! modifies the string in place, so you don't need to say a = a.sub! (' ',''). a is already changing. And since sub! is modifying in place, it returns nil if no changes are being made, and you end up setting a to nil when that happens. a = 'a b c d e f' 10.times { a.sub!(' ','')} puts a # 'abcdef' HTH, Chris