ローカル変数に関して、よくわからないことがあるので教えてくだ
さい。

下に示すプログラムの出力結果は
| a
| a
となって期待通りなのですが、1行目のx = nilを取ると
| a
| nil

となってしまいます。後者では、2回目のprintの実行時に参照して
いるxが、イテレータ内のスコープではなく、トップレベルのスコー
プのものになっているんじゃないかと想像するのですが、そういう
ものなのでしょうか。このとき、すでにxへの代入は起こっている
ので、イテレータスコープにxが存在していて、これを見てくれる
ものと思っていたのですが…。どう理解すべきか、御教示頂けると
幸いです。

x = nil
["a", "b"].each do |$_|
    x = $1 if /(a)/
    print x, "\n"
end

-- 
川村 尚生