gsubメソッドを使用してみました。
置換をしてくれるメソッドです。
string1 = "seven"
puts string2 = string1.gsub(/seven/, 'eleven') # => eleven
puts string1 # => seven
puts string2 # => eleven
次にgsub!としてみた場合レシーバを置換したものに完全に置き換えました。
string1 = "seven"
puts string2 = string1.gsub!(/seven/, 'eleven') # => eleven
puts string1 # => eleven
puts string2 # => eleven
次に置換に対応する文字列がなかった場合です。
置き換えるものがないとレシーバに変化は無いです。
string1 = "seven"
puts string2 = string1.gsub(/a/, 'eleven') # => seven
puts string1 # => seven
puts string2 # => seven
置換に対応する文字列がなく!を使った場合です。
返り値はnilになります。
string1 = "seven"
puts string2 = string1.gsub!(/a/, 'eleven') # => nil
puts string1 # => seven
puts string2 # => nil
レシーバと返り値の関係を意識できるように記述しました。