OVH Cloud OVH Cloud

récupérer les warnings provoqués dans un eval

2 réponses
Avatar
antoun
Bonjour,

J'utilise un eval dont le contenu peut être assez mouvant. Je récupère
les erreurs avec $@, mais j'aimerais bien également récupérer les
warnings dans une variable...

Par ex., avec un warning implicite et un autre explicite :

my $commande = 'my $a = 1; my $c = $a + $b; warn "toto" ; ' ;
print "Erreur : $@\n" if $@ ;

comment puis-je récupérer le texte de mes deux warnings ?

Merci d'avance !

Antoun

2 réponses

Avatar
jl_morel
Dans l'article ,
.fr a dit...

J'utilise un eval dont le contenu peut être assez mouvant. Je récupère
les erreurs avec $@, mais j'aimerais bien également récupérer les
warnings dans une variable...

Par ex., avec un warning implicite et un autre explicite :

my $commande = 'my $a = 1; my $c = $a + $b; warn "toto" ; ' ;
print "Erreur : $@n" if $@ ;

comment puis-je récupérer le texte de mes deux warnings ?



On peut utiliser $SIG{__WARN__}
Voir perlvar :
http://www.bribes.org/perl/docfr/perlvar.html#LC563715B

#!/usr/bin/perl -w
use strict;

my @W;
{
local $SIG{__WARN__} = sub { push @W, $_[0] };
my $commande = 'my $a = 1; my $c = $a + $b; warn "toto" ; ' ;
eval $commande;
}
print @W if @W;

__END__


--
J-L.M.

Avatar
Antoine Dinimant
On peut utiliser $SIG{__WARN__}
Voir perlvar :
http://www.bribes.org/perl/docfr/perlvar.html#LC563715B
local $SIG{__WARN__} = sub { push @W, $_[0] };


super, merci !

en fait j'ai passé une partie de la matinée sur $SIG{__WARN__} = sub
{...}, mais je n'ai jamais pensé que la sub il recevait le message en
paramètre !