in reply to Unique testing problem

BrowserUk's answer is the most sensible one for the script you outlined - but in the spirit of TMTOWTDI:

  1. You could add an END block, which will be run after the exit.
  2. Create an object with a DESTROY handler and ensure it won't be destroyed until the final GC phase before exit (e.g. make it self referencing, or put it in a package global). This can be useful since the DESTROY handler is run after the END blocks have been executed, allowing your to check that they did what you expected.

So that's three ways of doing it ;-)

{ package SelfRef; sub new { my $self_ref; bless \($self_ref = \$self_ref), shift; }; sub DESTROY { print "destroy handler in phase 2 GC\n"; }; }; SelfRef->new; END { print "end block\n" }; use subs 'exit'; sub exit { print "overrided exit(@_)\n"; CORE::exit(@_); } exit(0); __END__ # produces overrided exit(0) end block destroy handler in phase 2 GC