森田と申します。

個人的には、「未定義変数の参照はエラーになる」方が理想的だと思いますね。
特に、ローカル変数の様に頻繁に使う変数は、typoしたときにきちんとエラー
になってくれないとバグの原因になります(しかも気付きにくい)。

そういう観点からすると、このスレッドでメインになっている

1. nil を自動的にIntegerの0に変換する
2. 未定義ローカル変数を参照するとnilで定義される

ということを両方やってしまうと、非常に不幸な事態になると思います。
僕は少なくともRubyはそのようになって欲しくありません。
Perlに use strict という宣言が追加されたのもその辺りの反省から
だったはずです。

尚、変数/メソッドが定義されているか、されていないかを調べるなら

if defined?(lvar) then
  ...
end

というのが正しい方法です。
純粋な疑問として、未定義のローカル変数に対して、

if undefined_lval.nil? then
  ...
end

という処理をするっていうのはどんな場合に必要なんでしょうか?

-- 
MORITA Naoyuki <naohaq / ps.sakura.ne.jp>
a language a year