Доступны две версии String#gsub
a= "abc" # => "abc"
b= a.gsub("b", "2") # "a2c"
a # => "abc"
c= a.gsub!("c", "3") # => "ab3"
a # => "ab3"
String#gsub!
изменяет исходную строку и возвращает ссылку на нее.
String#gsub
не изменяет оригинал и заменяет копию.
Это общая идиома рубиновых имен методов, которые изменяют объект с помощью !
.