[PERL]Comparaison: Valeur nulle et zéro

khaz Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   -  
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,

mon problème porte sur une comparaison.
En effet,faire une boucle if avec comme condition qu'une valeur soit définie ou non.

voici un petit extrait de mon code :

if (! $Fic1{$cli})
{
print Sortie "$cli n'existe pas\n";
$cpt ++;
}

Après lecture de Fic1, j'ai une valeur $Fic1{$cli} = 0
pourtant, mon script va entrer dans mon if.
Je voudrais qu'il ne rentre dans mon if QUE si la valeur $Fic1{$cli} est indéfinie.

Je vous met l'extrait de mon debug :

Watchpoint 0: $cli changed:
old value: '00029310'
new value: '29310'
Watchpoint 1: $Fic1{$cli} changed:
old value: undef
new value: '0'
main::(confront_date.pl:65): if (! $Fic1{$cli})
main::(confront_date.pl:66): {
DB<8>
main::(confront_date.pl:67): print Sortie "$cli n'existe pas\n";


Quelle comparaison effectuer pour ne rentrer dans le if que il $Fic1{$cli} n'est pas définie ?
A voir également:

1 réponse

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

condition qu'une valeur soit définie ou non.

Il faut comprendre la différence entre une variable définie ou pas et un teste de verité (boolean) ou context boolean si tu veux.

Pour tester si une variable est définie tu as la fonction defined.

Voici un exemple qui pourra t'eclairer
#!/usr/bin/perl
use strict;use warnings;
my $var;
my $var2;
my $var3;

# contexte chaîne de caractère
$var .= "aaa";
print "$var\n";

# contexte numérique
++$var2;
print "$var2\n";

# avec négation de defined
# si n'est pas défini
if(! defined($var3)){
        print "\$var3 n'est pas défini\n";
}

# avec defined + unless
unless( defined($var3)){
        print "\$var3 n'est pas défini\n";
}
__END__
Exécution
lami20j@debian:~/trash$ perl ccm.pl
aaa
1
$var3 n'est pas défini
$var3 n'est pas défini
--

lami20j
1