Comment puis-je déterminer si un hachage Perl contient une application clé pour une valeur indéfinie?

StackOverflow https://stackoverflow.com/questions/2124977

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.

Était-ce utile?

La solution

  

existe () 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

Incorrect

. 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} ) {
    ...
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top