Comment puis-je trouver le nombre de clés dans un hash dans Perl?

Comment trouver le nombre de clés dans un hash, comme si vous utilisiez $# pour les tableaux?

 scalar keys %hash 

ou juste

 keys %hash 

Si vous êtes déjà dans un contexte scalaire, par exemple my $hash_count = keys %hash ou print 'bighash' if keys %hash > 1000 .

Incidemment, $#array ne trouve pas le nombre d’éléments, il trouve le dernier index. scalar @array trouve le nombre d’éléments.

nous pouvons utiliser comme ça aussi

 my $keys = keys(%r) ; print "keys = $keys" ; 0+(keys %r) 

Ce qui suit retournera un de moins que le nombre de clés dans votre hash. Vous aimerez peut-être si vous aimez le style de $#array des choses (ou la concision) $#array :

 $#{$hash}; 

ÉDITION CRITIQUE:

Attends … c’est intéressant. Cela fonctionne si vous voulez l’utiliser comme référence de tableau, mais pas si vous l’utilisez à l’extérieur. Il est donc utile si vous souhaitez accéder à la dernière clé de votre hachage, à condition que vous ayez assigné vos clés en tant que tableau à un temp: Check out out:

 %hash = ( "barney" => "dinosaur", "elmo" => "monster"); @array = sort {$a cmp $b} keys %hash; print $array[$#{$hash}]; # prints "elmo" 

Mais pas après Perl 5.10:

 use feature ":5.10"; my %p = (); say $#%p; # $# is no longer supported 

et pire:

 use feature ":5.10"; my %p = (a=>1, b=>2, c=>3); say $#{%p}; # -1 

imprimer les clés scalaires% hash;

  OR 

$ X = clés% hash; imprimer $ X;

(Les clés% hash renvoient la valeur des clés dans le contexte de liste qui change ensuite dans le contexte scalaire (lors de l’affectation à une variable scalaire).)

Cela fonctionnera facilement et pour toute taille de hachage.

imprimer les clés scalaires% hash;