>>346
最後の一行だけ意味がわからないからそこだけは何ともいえない。

メソッド側で値を変更されることはあり得るよ。

def foo(s)
 s.gsub!(/baka/, 'aho')
end

a = 'baka baka'
puts a #=> baka baka
foo(a)
puts a #=> aho aho

Cの変数のイメージだとRubyの変数は説明がつかない。
Rubyの変数はポインタ型の変数だと思っておいた方がまだまし。