Ruby で引っかかったコード

Ruby で以下のようなコードを書くとどうなるでしょう.

a = [1,2,3]

a.each do |a|
  puts a.to_s
end

a.each do |a|
  puts a.to_s
end


期待していたのはこんな感じ.


1
2
3
1
2
3
でも実際には

1
2
3
hoge.rb:7: undefined method `each' for 3:Fixnum (NoMethodError)
となってしまって思考がフリーズしてしまった.

きっと Ruby 使いの人には当たり前なんだろうけど,
失敗の根本原因は僕がブロック引数のスコープはブロックの
中だけだと思っていたこと.

ようするに,一つ目の each で a が書き換えられて,2つ目の a.each の a は 3 になってしまっているのが原因でしたとさ.
よく分からずに書くもんじゃないな.


追記:
コメントいただきました.
上記のようになるのは1.8系で,1.9では期待通り動きます.
個人的にはλ計算的な意味でそっちのほうが自然だと思うのですが,Ruby ではそもそも同じ変数名を使うようなプログラムはよくないという判断だったりするのだろうか.