Perl 5's behaviour in this respect is largely undocumented and doing
things during exception-triggered global destruction has a habit of
generating messages about attempting to free unreferenced objects, or
just crashing the interpreter entirely, and I can't see anything in
the synopses about it.
A closely related question here: exactly how much can I assume has
already been executed when writing destructors and ALAP blocks? Do I
have to guard against some of my data mysteriously transmuting into
undef?