Je dois déterminer si un hachage Perl a une clé donnée, mais cette clé sera mappée à une valeur undef. Plus précisément, la motivation pour cela est de voir si les indicateurs booléens en utilisant getopt()
avec une référence de hachage passé en elle. J'ai déjà recherché à la fois sur ce site et google, et exists()
et defined()
ne semblent pas être applicables à la situation, ils voient juste si la valeur pour une clé donnée est indéfinie, ils ne vérifient pas si le hachage a réellement le clé. Si je suis un RTFM ici, s'il vous plaît pointez-moi vers le manuel qui explique cela.Comment puis-je déterminer si un hachage Perl contient un mappage de clé sur une valeur indéfinie?
Comment puis-je déterminer si un hachage Perl contient un mappage de clé sur une valeur indéfinie?
Répondre
existe() et defined() ne voient semblent pas être applicables à la situation, ils ont juste si la valeur pour une clé donnée est définie, ils ne pas vérifier si le hachage contient réellement la clé
Incorrect. C'est bien ce defined()
fait, mais exists()
fait exactement ce que vous voulez:
my %hash = (
key1 => 'value',
key2 => undef,
);
foreach my $key (qw(key1 key2 key3))
{
print "\$hash{$key} exists: " . (exists $hash{$key} ? "yes" : "no") . "\n";
print "\$hash{$key} is defined: " . (defined $hash{$key} ? "yes" : "no") . "\n";
}
produit:
$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
La documentation de ces deux fonctions est disponible à la commande en ligne à perldoc -f defined
et perldoc -f exists
(ou lisez la documentation pour toutes les méthodes au perldoc perlfunc
*). La documentation web officiel est ici:
* Puisque vous spécifiquement mentionné RTFM et vous ne pouvez pas être au courant des lieux de la documentation Perl, permettez-moi de également que vous pouvez obtenir un index complet de tous les perldocs au perldoc perl
ou au http://perldoc.perl.org.
Si je lis votre question correctement, je pense que vous êtes confus au sujet de exists. De la documentation:
existe EXPR
Étant donné une expression qui spécifie un élément de hachage ou élément de tableau, retourne vrai si l'a jamais été initialisées l'élément spécifié dans le hachage ou d'un tableau , même si la valeur correspondante est indéfinie.
Par exemple:
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};
}
Réponse courte:
if (exists $hash{$key} and not defined $hash{$key}) {
...
}