[SP-pm] alarm()

Luis Motta Campos luismottacampos em yahoo.co.uk
Quarta Janeiro 30 01:27:45 PST 2008


Nelson Ferraz wrote:
> Dica: é melhor não testar para "definideness", pois $@ é sempre
> definido depois de um eval:
[snip]
> (Eu sei porque já fui mordido por isso antes :-P)

Boa, Nélson. Você está certo. Do manual do eval:

"If there is a syntax error or runtime error, or a "die" statement is
executed, an undefined value is returned by "eval", and $@ is set to the
error message.  If there was no error, $@ is guaranteed to be a null
string."

E assim eu posso reescerver tudo assim:

#!/usr/bin/perl
use strict;
use warnings;

sub processa;
sub busca_info;

local $SIG{ALARM} = sub { die q{Acorda pra cuspir!}; };
for ( 0 .. 10 ) {    # para que isso?
     alarm 5;
     my ($info);
     eval { processa( busca_info($_), $_ ); };
     if ( $@ eq q{Acorda pra cuspir!} ) {

         # teu alarme deu timeout: loga o evento, next.
         log(qq{Time out processando $_.});
         next;
     }
     elsif ( $@ ) {

         # deu merda, trata erro
     }
}    # for

__END__

Putamplexos!
-- 
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}


Mais detalhes sobre a lista de discussão SaoPaulo-pm