Вам нужно настроить обработчик сигнала.
package Test;
sub new { bless {} }
sub DESTROY { print "in DESTROY\n" }
package main;
my $terminate = 0;
$SIG{INT} = \&sigint;
sub sigint { $terminate = 1; }
my $t = new Test;
while (1) {
last if $terminate;
sleep 10;
}
Что-то в этом роде. Затем в вашем основном цикле просто проверьте $terminate
и, если он установлен, выйдите из программы как обычно.
Что происходит, так это то, что cntl-c прерывает режим сна, обработчик сигнала называется установкой $terminate
, режим сна немедленно возвращается, он возвращается к началу, проверяет $terminate
и корректно завершается.