title: How to handle abnormal program termination in Perl on Windows
body: <p>I have a Perl program on Windows that needs to execute cleanup actions on exit.  I wrote a signal handler using <code>sigtrap</code>, but it doesn't always work.  I can intercept Ctrl-C, but if the machine is rebooted or the program is killed some other way, neither the signal handler nor the END block are run.  I've read that Windows doesn't really have signals, and signal handling on windows is sort of a hack in Perl.  My question is, how can I handle abnormal termination the Windows way?  I want to run my cleanup code regardless of how or why the program terminates (excluding events that can't be caught).  I've read that Windows uses events instead of signals, but I can't find information on how to deal with Windows events in Perl.</p>
  
  <p>Unfortunately, I don't have the authority to install modules from CPAN, so I'll have to use vanilla ActiveState Perl.  And to make things even more interesting, most of the machines I'm using only have Perl 5.6.1.</p>
  
  <p><strong>Edit:</strong>  I would appreciate any answers, even if they require CPAN modules or newer versions of Perl.  I want to learn about Windows event handling in Perl, and any information would be welcome.</p>