[PERL]Comparaison: Valeur nulle et zéro

Fermé
khaz Messages postés 26 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 29 mars 2008 - 7 déc. 2007 à 15:07
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 7 déc. 2007 à 19:44
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
7 déc. 2007 à 19:44
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