[Perl] Que faire contre ce « warning » ?

Dominique Asselineau asseline at telecom-paristech.fr
Sam 14 Jan 12:18:22 CET 2017


Yon wrote on Sat, Jan 14, 2017 at 10:44:05AM +0000
> Bonjour,
> 
> On Sat, Jan 14, 2017 at 11:34:12AM +0100, Philippe Delavalade wrote:
> > Le samedi 14 janvier à 11:12, Hugues a écrit :
> > > Bonjour
> > >
> > > effectivement si tu ajoutes
> > >
> > > while( $src && ($l = <$src>) && ($l !~ m/,1,/) ) {next;}
> > >
> > > tu n'as plus le warning
> > > mais aussi si tu supprimes
> > >
> > > ($l !~ m/,1,/)
> > >  et tu le met dans le while
> > >
> > > il doit commencer a tester la deuxièmement condition avant la première ?
> >
> > C'est certainement ça l'idée car si je définis au départ
> > my $l=''
> >
> > (sans cela j'ai un autre warning tout ce qu'il y a de normal comme quoi $l
> > est uninitialized) puis que j'inverse les condition dans le while, plus de
> > warning...
> >
> > Merci beaucoup et bon week-end.
> Si tu rajoutes:
> 
>     use diagnostics;
> 
> au début du fichier, tu obtiens plus de détails :
> 
>     (W misc) In a conditional expression, you used <HANDLE>, <*> (glob),
>     each(), or readdir() as a boolean value.  Each of these constructs
>     can return a value of "0"; that would make the conditional expression
>     false, which is probably not what you intended.  When using these
>     constructs in conditional expressions, test their values with the
>     defined operator.
> 
> C'est-à-dire, que perl te prévient que $l = <$src> peut être risqué, car si
> $src est la chaîne "0", ça va être false, et ce n'est probablement pas ce que
> tu voudrais dans ce cas

Ok mais dans ce cas, pourquoi n'y a-t-il pas de warning lorsqu'on met seulement

while( $l = <$src> ) { ... }

Dans le while, on a bien à faire à une condition ?

dom
--


Plus d'informations sur la liste de diffusion Perl