[Perl] Que faire contre ce « warning » ?
Yon
anaseto at bardinflor.perso.aquilenet.fr
Sam 14 Jan 12:40:56 CET 2017
On Sat, Jan 14, 2017 at 12:18:22PM +0100, Dominique Asselineau wrote:
> > 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 ?
Comme l'a mentionné Laurent, perl fait un cas particulier et rajoute
automatiquement un defined. Dès que la condition est plus compliquée
qu'un $l = <$src>, il ne le rajoute plus automatiquement et lance un
warning. Dans le cas où on voudrait vraiment que ce soit traité comme un
booléen, il faudrait écrire while(($l = <$src>) ne '0').
Dans while(<>) le defined implicite est aussi ajouté. La liste des cas
spéciaux est donnée dans perldoc -f '<>'.
--
Yon
Plus d'informations sur la liste de diffusion Perl