Solution: Catch ctrl-c and ask
examples/signals/catch_ctr_c_confirm.pl
#!/usr/bin/env perl use strict; use warnings; my $ctrl_c; $SIG{INT} = sub { $ctrl_c = 1; }; print "Please press Ctrl-C to terminate this program:\n"; for my $i (1..100) { confirm_exit(); sleep 1; print "$i\n"; } print "done\n"; sub confirm_exit { return if not $ctrl_c; local $SIG{INT} = 'IGNORE'; $ctrl_c = 0; print "Do you really want to terminate the application? (y/n) [n]"; chomp(my $input = <STDIN>); exit if $input eq 'y' or $input eq 'Y'; }
See what happens if you don't set the SIG handler to IGNORE?
See what happens if you remove the word local?