2010-09-30 2 views
0
$ cat flaglist.log 
flag1 
flag2 
flag3 
flag4 
$ 

code PerlComment accéder correctement aux variables d'environnement dans Perl?

my $infile = "flaglist.log"; 
open my $fpi, '<', $infile or die "$!"; 
while (<$fpi>) { 
    chomp; 
    if ($ENV{$_}) { # something wrong here 
     func($_); 
    }  
    else { 
     print "oops\n"; 
    }  
} 

$ perl code.pl 
oops 
oops 
oops 
oops 
$ 

Tous les quatre drapeaux sont des noms de variables d'environnement définies (j'ai vérifié à l'aide echo $flag1 de la coquille).

Ici, la condition if renvoie toujours false. Si j'écris $ENV{flag1}, il en résulte à vrai et func() est appelé comme je m'y attendais. Qu'est-ce que je fais de mal à l'instruction if?

+2

Vous pouvez indiquer 'if (existe $ ENV {$ _})'. Votre test actuel échouera si vous avez une variable d'environnement définie sur '0'. – daotoad

Répondre

4

Le code semble fonctionner pour moi. Essayez de supprimer les espaces des lignes d'entrée:

while (<$fpi>) { 
    s/\s+//g; 
    # ... 
} 
+0

@eugene, ça marche, mais je ne comprends pas. Chomp n'était-il pas censé faire le travail? – Lazer

+5

@Lazer: Non. 'Chomp' supprime seulement la fin de la chaîne qui correspond à la valeur dans' $/'qui est' \ n' par défaut. Aucune autre coupe n'a lieu. –

+0

@Alan, oui, je sais, mais mon fichier ne comportait aucun espace sauf un saut de ligne, qui devait être supprimé par 'chomp'. – Lazer

Questions connexes