『たのしいRuby第3版』第14章正規表現

subメソッドとgsubメソッドのところ、ちょっと分かりにくいのでテスト。
「!」つきのsub!メソッドとgsub!メソッドにすると、レシーバーにあたるオブジェクトを
置き換え後の文字列に変更する仕様とのこと。

str = "abracatabra"
nstr = str.sub(/.a/) do |matched|
  '<'+matched.upcase+'>'
end
p str
p nstr

実行結果
>> p str
"abracatabra"
=> nil
>> p nstr
"abcatabra"
=> nil

str = "abracatabra"
nstr = str.sub!(/.a/) do |matched|
  '<'+matched.upcase+'>'
end
p str
p nstr

実行結果
>> p str
"abcatabra"
=> nil
>> p nstr
"abcatabra"
=> nil

ふむふむ。