La versione 5 del Perl ha aggiunto il blocco END che può essere usato
per simulare atexit(). Ogni blocco END di un package viene chiamato
quando il programma o il thread termina (consultate perlmod per maggiori
dettagli).
Per esempio, potete usare quanto segue per assicurarsi che il vostro
programma che implementa un filtro possa dare un output senza riempire
il disco:
END {
close(STDOUT) || die "il close dello STDOUT e` fallito: $!";
}
Il blocco END non viene chiamato quando un segnale non catturabile termina
il programma, quindi se usate dei blocchi END dovreste anche usare
use sigtrap qw(die normal-signals);
Il meccanismo di gestione delle eccezioni del Perl è il suo
operatore eval(). Potete usare eval() come setjmp e die() come
longjmp. Per dettagli su questi aspetti consultate la sezione sui segnali,
specialmente "time-out handler for a blocking flock()" ["gestore di time
out per un flock() non bloccante", NdT] in perlipc/"Signals" ["Segnali", NdT] o la sezione
sui "Signals" nel Camel Book.
Se la gestione delle eccezione è tutto quello a cui siete
interessati, provate la libreria exceptions.pl (parte della distribuzione
perl standard).
Se volete la sintassi atexit() (come pure quella per rmexit) provate
il modulo AtExit disponibile su CPAN.
|