[Roma.pm] perl e tastiera

Emanuele Zeppieri ema_zep at libero.it
Fri Sep 22 04:48:02 PDT 2006


> -----Original Message-----
> From: roma-bounces+ema_zep=libero.it at pm.org 
> [mailto:roma-bounces+ema_zep=libero.it at pm.org] On Behalf Of 
> Flavio Poletti
> Sent: Thursday, September 21, 2006 4:28 PM
> To: roma at pm.org
> Subject: Re: [Roma.pm] perl e tastiera
> 
> 
> [snip]
> > In generale, per mandare in timeout operazioni che si 
> > prolungano troppo, si usa $SIG{ALRM} (cioè SIGALRM),
> > assegnandovi un handler che semplicemente invoca die(),
> > e wrappando l'operazione long-running in una eval{...}
> > (o meglio 2 eval{...} annidate, per intercettare anche
> > errori di altra origine).
> [snip]
> 
> Ciao Emanuele,
> 
>    ti va di elaborare un po' sulla questione delle 2 eval annidate? Un
> esempietto pratico sarebbe *molto* interessante :D
 
Ciao Fla'!

Ammazza che sei annato a ribecca'! ;-)

Allora, la eval più interna e` opportuna perché in genere si vuole
mandare in timeout operazioni /esterne/ (quali chiamate di sistema,
connessioni a db e ad altre risorse esterne etc.), per cui e` opportuno
segnalare gli errori specifici dovuti a queste operazioni, quando si
verificano.
Inoltre i due wrapper servono anche ad evitare una (strettissima) race
condition che previene il reset dell'allarme (e` piuttosto sottile da
osservare, ma e` spiegata in dettaglio nell'esempio che segue).

Un esempio delle due eval annidate stava proprio in "Programming Perl":
aspe' che guardo...
Ecco, pag. 417 della 3rd edition.

Per chi non avesse il libro:
http://www.unix.org.ua/orelly/perl/prog3/ch16_01.htm

nel paragrafo dal titolo "Timing Out Slow Operations".
(E' la prima che ho trovato con Google, spero che si tratti di una
riproduzione legale del Safari Bookshelf...)

Fammi sapere che ne pensi.

Ciao,
Emanuele.



More information about the Roma mailing list