ensure, rescue, breakを組み合わせたときの挙動が分かりません。

環境

この記事の内容は、以下の環境で確認しました。

$ ./ruby -v
ruby 1.9.0 (2008-08-26 revision 18849) [i686-linux]

分からないところ

以下のコードbar.rbを実行したとき、

while true
  begin
    begin
      break
    rescue Exception
      puts "bar"
    end
  ensure
    puts "foo"
    raise Exception
  end
end

以下が得られます。

foo
bar
foo
bar.rb:11:in `<main>': Exception (Exception)

私は以下を期待していたのですが...。

foo
bar.rb:11:in `<main>': Exception (Exception)

Ruby 1.8

Ruby 1.8では、私の期待通りの動作をします。

$ ruby1.8 -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux]
$ ruby1.8 bar.rb
foo
bar.rb:11: Exception (Exception)