[Perl] Que faire contre ce « warning » ?

Yon anaseto at bardinflor.perso.aquilenet.fr
Sam 14 Jan 11:44:05 CET 2017


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 (qui ceci dit probablement n'arrive pas dans ton
cas de toutes façons). perl conseille donc d'écrire defined($l = <$src>).

-- 
Yon


Plus d'informations sur la liste de diffusion Perl