Comment puis-je déterminer si un hachage Perl contient une application clé pour une valeur indéfinie?
Question
Je dois déterminer si un hachage Perl a une clé donnée, mais cette clé correspondra à une valeur undef. Plus précisément, la motivation pour cela est de voir si des drapeaux booléens en utilisant getopt()
avec une référence de hachage passé en elle. Je l'ai déjà cherché à la fois ce site et Google, et exists()
et defined()
ne semble pas être applicable à la situation, ils ne voient si la valeur pour une clé donnée est définie, ils ne vérifient pas si le hachage a fait la clé. Si je un RTFM ici, s'il vous plaît me indiquer le manuel qui explique cela.
La solution
Incorrectexiste () et defined () ne semblent pas être applicables à la situation, ils ne voient si la valeur pour une clé donnée est définie, ils ne vérifient pas si le hachage est en fait la touche
. C'est en effet ce que 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 à 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, laissez-moi également de souligner que vous pouvez obtenir un index complet de tous les perldocs à perldoc perl
ou à http://perldoc.perl.org .
Autres conseils
Si je lis bien votre question, je pense que vous êtes confus au sujet de existe . De la documentation:
existe EXPR
Etant donné une expression qui spécifie un élément de hachage ou d'un élément de tableau, les rendements vrai si l'élément spécifié dans le hachage ou d'un tableau n'a jamais été initialisé, même si le correspondant La valeur est dé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} ) {
...
}