特殊変数$!

るりまサーチによると最後に発生した例外が$!に入るそうです。

#!/usr/local/bin/ruby
puts "$! = #{$!}(#{$!.class})"#=>"$! = (NilClass)"
begin
  raise "test"
rescue
  puts "$! = #{$!}(#{$!.class})"#=>"$! = test(RuntimeError)"
end
puts "$! = #{$!}(#{$!.class})"#=>"$! = (NilClass)"

でも試してみたら、入ったままになるわけではないようです。nilに戻ったように見えます。このあたり理解できてません。