いわおかです。

本題とは少し離れますが、

In the message <EBEFIFGNGMKELGCGNMPMAELPCKAA.yahatah / agr.kyushu-u.ac.jp>,
  on Thu, Jan 13, 2005 at 06:34:54PM +0900, Hisashi Yahata wrote:
>  すでにお礼の中(下の文)でも述べましたように、サブルーチンには、def..endが
> 利用できることは理解していますが、引数でデータ交換する(配列にすれば一文字で
> すむわけですが、)が、すっきりせずに、面倒な印象があるからです。

このあたりの感覚は、生い立ちによって違いがあって面白いですね。昔々、
BASIC から C に移って時間が経ち、BASIC ではみんなグローバルという
ことも忘れかけた頃に、人に渡すか何かで、C で書いた関数を BASIC の
サブルーチンで置き換えようとして、「何でこんなとこの影響が、こっち
のとんでも無い方にまで出るんだよぉ」ということで面倒になって放り出
した記憶が蘇えってきました:-) FORTRAN のサブルーチンでもハマッタ記
憶があります。

C 育ちですと、基本的にみんなローカル変数、あちこちから参照されるフ
ラッグ的なものはグローバル変数、さらにソースコードを分割することに
よって、ソースファイルローカルなグローバル変数(変な日本語ですが)
とソースファイル間でグローバルなグローバル変数てな使い分けになるん
でしょうか。

で、ruby で素直に書くと、オブジェクトに仕事をしてもらうと考えて、
元の例とはちょっと違いますがこんな書き方すれば、引き数渡しが必要な
場面も減ると思います。

class Integer
    def addtwo
	self + 2
    end
end

a = 1
p a.addtwo

>  「グローバル変数はなるべく使わないほうがよい」という示唆があるので、ローカ

この「グローバル変数はなるべく使わないほうがよい」というのは、ruby
で言えば $ で始まる名前の変数を使わない方が良いというのではなく、
使わなくてすむような書き方をしましょうという意味です。例えば、ソー
スの先頭で、使う変数を全部初期化して、ソース内のどのブロックからも
参照できるようにするというのは、実質的にグローバル変数を作っている
のと同じでしょう。であれば、明示的に $ で始まるグローバル変数を使っ
た方が、後々のメンテナンスも楽になると思います。

いわおか