in reply to File::Temp.. What am I missing?

It makes sense to me; you're interrupting a running program before it has a chance to finish. If you want to perform the kind of cleanup that your program doesn't get to (thanks to the interruption), install a signal handler for SIGINT. Like graff suggests, you can install a signal handler. Here's an easier approach though:

use strict; use warnings; use File::Temp 'tempfile'; $SIG{INT} = sub { exit }; for (0 .. 50) { my $tmp = File::Temp->new('DIR' => '/tmp', 'UNLINK' => 1); sleep(1); }

With that change, the program will exit normally on SIGINT, rather than suffering an immediate exit. END and DESTROY code will run, which will clean up the temporary files.