いわおか様

 矢幡です。多数のご指導いただき、有り難うございます。
 私の事情を少しお伝えします。
 最初BasicのプログラムをPerlに移植し、それをさらにRubyに移植しています。
 Perlでは全ての変数前に$をつけなければならない書き方が嫌で、Rubyに惹かれた
わけですので、なるべくローカル変数にして$を外しておいて、徐々にdef..endの形
式にしていく手順を踏むつもりでいます。また、今後は機能を加え複雑な構成にする
予定ですので、オブジェクト指向言語にも惹かれ、$で始まるグローバル変数をなる
べく使わなくて済むように、Module化していきたいと考えています。

 しかし、私が作成した既存のPerlスクリプト では、適当に機能の塊をsubにして、
これをMainで呼び出し、Mainの構成を見やすい表現にしました。Perlの変数名をその
まま残せば、Rubyのグローバル変数になるので、subのみをprocに変更するだけです
むと思います。PerlからRubyに変換してもプログラムが動くことを確認した後に、明
示的に $ で始まるグローバル変数の数を減らす手順があると思います。すなわち、
逆に$を削っていく作業が必要になります。

 ご指摘のように、「ソースの先頭で、使う変数を全部初期化して、ソース内のどの
ブロックからも参照できるようにするというのは、実質的にグローバル変数を作って
いるのと同じ」で、まさにそのとおりと思います。しかし、ほとんど$が付いた変数
を徐々に削除するよりも、Module化しながら、変数の初期化を削っていくのが効率的
だと推察します(間違っているかもしれませんが。)。
 機能毎にまとめたsubであっても、その中の変数のほとんどがグローバル変数扱い
となる場合に、引数が多くなります。データの引き渡しをdef毎(Perlのsub毎)
に行うのと、グローバル変数として保持するのは、「演算速度」と「メンテ(および
発展)の容易さ」のバランスの問題と思いますが、どちらが効率的なのか、Rubyに詳
しい諸先輩は、これをどのようにされているのかお聞かせいただけると嬉しいです。
具体例がなければ議論は無理かもしれませんが。

矢幡