in reply to Window Close / Process Termination Handler on Windows
I don't have time currently to deeply troubleshoot (especially why END isn't working for you), but one sure-fire way to ensure DESTROY is called is wrap it with a dummy package, and then generate an unused object in your code. DESTROY is called when an object goes out of scope (in our case, the program finishes). This is quick and dirty, but it does do what I think you're after. Better would be to possibly rewrite the whole shebang to be Object Oriented.
use strict; use warnings; use FindBin; use File::Spec; my $log_fn = File::Spec->catfile($FindBin::Bin, "cleanup_handler_log.t +xt"); open my $LOG, '>>', $log_fn or die "Failed to open log '$log_fn' for a +ppending ($!)\n"; binmode $LOG; $LOG->autoflush(1); # disable buffering package Blah;{ sub new { return bless {}, shift; } sub DESTROY { print $LOG "DESTROY() called. Cleaning up...\r\n"; } } my $obj = Blah->new; my $sleep_time = 1; # 1d print "Sleeping $sleep_time seconds ...\n"; sleep $sleep_time; print "Print finishing normally (sleep $sleep_time completed)\n";
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Window Close / Process Termination Handler on Windows
by Aldebaran (Curate) on Aug 30, 2018 at 00:47 UTC | |
|
Re^2: Window Close / Process Termination Handler on Windows
by rminner (Chaplain) on Aug 29, 2018 at 15:50 UTC |