runtime/at_exit_handlers.rb

tests/_examples/runtime/at_exit_handlers.rb in the metorex repository.

begin
  at_exit
rescue ArgumentError => error
  puts error.message
end

puts Kernel.private_instance_methods.include? :at_exit

at_exit { puts "registered first" }
at_exit do
  puts "outer"
  at_exit { puts "nested" }
  puts "outer done"
end
at_exit { puts "registered last" }

puts "main body"

Output:

called without a block
true
main body
registered last
outer
outer done
nested
registered first