2010-04-13 12 views

Odpowiedz

6

Będziesz musiał skonfigurować procedurę obsługi sygnału.

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; 
} 

Coś wzdłuż tych linii. Następnie w głównej pętli po prostu sprawdź $terminate i jeśli jest ustawiony, wyjdź normalnie z programu.

Co się dzieje, że cntl-c przerywa sen, procedura obsługi sygnału jest nazywane ustawienie $terminate, natychmiast powraca do spania, to pętle do góry, testuje $terminate i wyjście z wdziękiem.

7

Jako Robert mentioned potrzebujesz obsługi sygnału.
Jeśli potrzebujesz tylko wywołania destruktora obiektowego, możesz użyć:

$SIG{INT} = sub { die "caught SIGINT\n" };.

Powiązane problemy