my $EXIT = 0; $SIG{INT} = sub{ warn "Caught Zap!\n"; $EXIT = 1 }; while (1) { print "Looping\n"; sleep 2; do{ warn "Graceful exit!\n"; exit } if $EXIT; }