厳密にいうとRubyは値を渡している、しかしながらオブジェクトの参照値を渡す場合、例にあったように破壊的なメソッドで参照先を変更することができる。ほかにも例をあげると、Hashの内部を変更した場合、呼び出し元の変数も変更される。
Strictly speaking, Ruby is passing by reference. However, what Ruby is passing is reference value of an object so that you can modify the object which the reference value is pointing using Ruby's destructive method (= methods ending with !). Another example is when you modify a Hash value as follows.
>> a = {b:'c'}
=> {:b=>"c"}
>> def foo(d); d[:b] = 'C'; end
=> nil
>> foo(a)
=> "C"