Quelle est la raison d'évaluer jamais un hachage dans Perl dans un contexte scalaire?

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

  •  28-10-2019
  •  | 
  •  

Question

Je me rends compte que l'évaluation d'un tableau dans Perl dans un contexte scalaire est utile: elle se traduit par un # d'éléments.

Mais quelle est l'utilisation pratique de pouvoir évaluer un hachage dans un contexte scalaire? par exemple

  • my $scalar_value = %hash;

  • scalar(%hash)

Pour autant que je comprenne, il produit une chaîne comme "3/4"Donner des informations sur les internes du hachage qui ne semblent être utiles que pour le débogage.

Était-ce utile?

La solution

Il produit une valeur qui peut être utilisée comme indicateur vrai / faux pour savoir si le hachage est vide (pas de clés).

Par exemple:

if (%hash) {
    print "Hash has elements\n";
} else {
    print "Hash is empty\n";
}

if Force l'expression dans un contexte scalaire en raison de son utilisation comme expression booléenne.

C'est un concept très similaire à l'utilisation @array Dans un contexte scalaire pour tester le vide:

if (@array) {
    # NOT empty!
}

Autres conseils

Le scalaire (% de hachage) vous permet de vérifier si l'algorithme de hachage fonctionne correctement. Si vous avez 1 000 clés et que vous voyez quelque chose comme 2/16, cela signifie que toutes les clés se résument à seulement 2 des 16 seaux alloués. Cela signifie que toutes vos clés sont très similaires et provoquent de nombreuses collisions, ce qui se traduit par de longues recherches séquentielles dans le seau.

Le nombre de godets par défaut est 8

perl -le '$h{a}=1;print scalar %h'
1/8

Prestash le hachage avec 1000 seaux (à la puissance la plus proche de 2)

perl -le 'keys(%h) = 1000;$h{a}=1;print scalar %h'
1/1024

Cela aide également lorsque vous bénissez un hachage pour perl oo. Vous pouvez accélérer les choses si vous savez qu'il y aura beaucoup de clés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top