in reply to exec with cleanup

I wonder if we're making this more complicated than need be. As perlmod says END blocks are executed last in first out, so if you want your END block to be last to execute just make sure its defined first. That isn't too hard is it? Maybe a little ugly - I know I usually place my END blocks at the end of my script, not the top.

From the below proof it seems to me that DESTROY blocks of objects are executed ahead of END blocks. So if you declare your END block first(so as to be the last to execute) then you should have reasonable assurance that your exec call will be the last thing to execute.(after all DESTROY and other END blocks) Can anyone see any holes in this?

use strict; use warnings; my $blessed_junk = testIt->new(); print "Time to exit outa here...\n"; exit 0; sub END { print "THE END!\n"; } package testIt; sub new { my $junk = {}; bless $junk; return $junk; } sub DESTROY { print "I'm dying!\n"; }
and the output is:
Time to exit outa here... I'm dying! THE END!

Replies are listed 'Best First'.
Re^2: exec with cleanup
by Anonymous Monk on Jun 08, 2004 at 17:14 UTC
    Yeah, this is the solution I was going to recommend, but you got to it first. :)

    The perlmod page clearly says that the first END that perl encounters is the last one that gets run, so maybe something like this would work for you:

    # very very top of your first file END { if (@::final_exec) { exec {$::final_exec[0]} @::final_exec; } } # later that same day... @::final_exec = ($^X, 'scriptname.pl', @args);