Je dois déterminer si un hachage de PERL a une clé donnée, mais cette touche sera mappée sur une valeur de la FNUD. Plus précisément, la motivation pour cela consiste à voir si des drapeaux booléens lors de l'utilisation de getopt () code> avec une référence de hachage transmise. J'ai déjà fouillé ce site et Google, et
existe () code> et
défini () code> ne semble pas être applicable pour la situation, ils viennent de voir si la valeur Pour une clé donnée, il est indéfini, ils ne vérifient pas si le hachage a réellement la clé. Si je suis une RTFM ici, veuillez me pointer le manuel qui explique cela. P>
3 Réponses :
Si je lis votre question correctement, je pense que vous êtes confus sur Existe a >. De la documentation: existe expr p>
donné une expression qui spécifie un
élément de hachage ou élément de tableau, retourne
vrai si l'élément spécifié dans le
hachage ou tableau a déjà été
initialisé, même si le correspondant
la valeur est indéfinie. P>
blockquote> Par exemple: P>
use strict;
use warnings;
my %h = (
foo => 1,
bar => undef,
);
for my $k ( qw(foo bar baz) ){
print $k, "\n" if exists $h{$k} and not defined $h{$k};
}
existe () et défini () Ne semble pas être applicable pour la situation, ils ne voyent que si la valeur d'une clé donnée est indéfinie, ils ne vérifient pas si le hachage a la clé p>
incorrect. C'est en effet ce que
défini () code> fait, mais
existe () code> fait exactement ce que vous voulez: p>
$hash{key1} exists: yes $hash{key1} is defined: yes $hash{key2} exists: yes $hash{key2} is defined: no $hash{key3} exists: no $hash{key3} is defined: no
Réponse courte:
if ( exists $hash{$key} and not defined $hash{$key} ) { ... }