at_exitで終了時の処理を登録する

Rubyでは、at_exitで終了時の処理を登録することができます。
以下では、終了時にresourceがnilになっているかどうかを調べ、nilになっていなければメッセージを表示します。乱数を使って確率1/2で失敗するようにしてあります。

resource = '(Important resource)'
at_exit {
  puts "#{resource} is not released." if resource
}

if rand < 0.5
  puts "Release!"
  resource = nil
end

実行例です。

C:\work> ruby a.rb
(Important resource) is not released.

C:\work> ruby a.rb
(Important resource) is not released.

C:\work> ruby a.rb
Release!

C:\work> ruby a.rb
Release!

C:\work> ruby a.rb
(Important resource) is not released.