I would use:
while str.gsub!( ... ); end

"block ... while" is a 'regretted' feature
(http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/6768).

2007/9/24, Phrogz <phrogz / mac.com>:
> I want to keep running gsub! on a string until it returns nil. How do
> you prefer to do this?
>
> true while str.gsub!( ... )
>
> while str.gsub!( ... ); end
>
> begin
>   done = !str.gsub!( ... )
> end until done
>
> begin
>   made_replacement = str.gsub!( ... )
> end while made_replacement
>
> ...some other way?