Je ne comprend pas pourquoi le code ci-après me renvois des doubles dans le tableau malgrés la commande exists ...
#!/usr/bin/env perl
my $raison="";
my %tableau;
for(my $cpt=0; $cpt <= 5; $cpt++){
$token = "token ".$cpt;
if ($cpt == 2) { $token = "token 1"; }
print "compteur : $cpt\n";
print "mot : $token\n";
print "hash avant : \n\t@tableau";
push @tableau, $token unless exists $tableau{$token};
print "\n";
print "hash apres : \n\t@tableau";
print "\n\n";
}
Résultat :
compteur : 0 mot : token 0 hash avant : hash apres : token 0 compteur : 1 mot : token 1 hash avant : token 0 hash apres : token 0 token 1 compteur : 2 mot : token 1 hash avant : token 0 token 1 hash apres : token 0 token 1 token 1 compteur : 3 mot : token 3 hash avant : token 0 token 1 token 1 hash apres : token 0 token 1 token 1 token 3 compteur : 4 mot : token 4 hash avant : token 0 token 1 token 1 token 3 hash apres : token 0 token 1 token 1 token 3 token 4 compteur : 5 mot : token 5 hash avant : token 0 token 1 token 1 token 3 token 4 hash apres : token 0 token 1 token 1 token 3 token 4 token 5

stéphane
En revanche comme je te l'ai dit, ton hash ne contient rien. Donc exists ne trouve aucune clé. Son comportement est normal ;-)
Mais si tu insistes et pour voir que exists fonctionne comme tu le penses il y a un moyen ;-) (En fait il y a toujours un moyen, mais tu me demandes trop de réfléchir ;-DDDD
#!/usr/bin/env perl my $raison=""; my %tableau; for(my $cpt=0; $cpt <= 5; $cpt++){ $token = "token ".$cpt; if ($cpt == 2) { $token = "token 1"; } print "compteur : $cpt\n"; print "mot : $token\n"; print "hash avant : \n\t@tableau"; push @tableau, $token unless exists $tableau{$token}; $tableau{$token}=(); print "\n"; print "hash apres : \n\t@tableau"; print "\n\n"; } print scalar keys %tableau, "\n";En fait j'ajoute d'abord le token et ensuite je remplis le hachage avec le token.
Donc maintenant exists trouvera une par une les clés et s'il la trouve il ne va pas la remettre dans le tableau vu qu'il existe déjà.
Tu vois à la fin qu'il y a 5 clé (ce sont les tokens)