[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