in reply to How do I dump data to file on hard exit?

You don't have to close the filehandle to commit its output to disk. First, make sure you're flushing to the disk on every write, either by setting $| or with IO::Handle::flush. Then, to ask the OS to actually write the data to disk, use IO::Handle::sync. This may slow you down significantly, simply because disks are slow compared to memory, but the hit is probably less than a close/open.

It's up to you to find the right tradeoff between the speed of your code and how much data is lost in the event of an unclean shutdown.

One other thought: you can install all the signal handlers you want, but until there's a $SIG{TRIPPED_OVER_POWER_CORD}, that won't be foolproof.