鈴木です。

> b は"予想通り"ですが、ここで、a が変化するのは、嬉しくないことも
> あるかと思います。個人的には、(Ruby歴は短いのですが) def文の中の
> 実行文で、(self と Global変数以外の)外部の変数に影響を与えたいと
> 思ったことはありません。

私も始めて気が付きました。そうなんですね。
ただ、引数に式を使うと結果が変るので、違和感を感じます。
C言語に毒され過ぎかも(^^;

a=""
b="xyz".abcdef(a)
p a		# "abc"
p b		# "abcdef"

a=""
b="xyz".abcdef(a+"@")
p a     # ""
p b     # "@abcdef"

なんか、再帰処理とか書いてたら、ハマリそうな予感…