62 votes

Comment vérifier si un hash est vide en perl ?

J'utilise le code suivant pour vérifier si le hachage est vide. Existe-t-il une meilleure méthode et son utilisation est-elle sûre ?

if (!keys %hash) { print "Empty";}

7 votes

Si vous estimez que votre question a reçu une réponse, vous devez accepter une réponse en cliquant sur la coche à sa gauche.

104voto

TLP Points 48922
if (%hash)

Cela fonctionnera très bien.

De perldoc perldata :

Si vous évaluez un hachage dans un contexte scalaire, il renvoie false si le hachage est vide. S'il y a des paires clé/valeur, elle renvoie true ; plus précisément plus précisément, la valeur retournée est une chaîne de caractères composée du nombre de seaux utilisés et le nombre de seaux alloués, séparés par une barre oblique. barre oblique.

4 votes

Il semble beaucoup plus lent que keys %hash .

28voto

Schwern Points 33677

Il y avait un bug qui faisait que les hachages liés dans un contexte scalaire retournaient toujours false. Le bogue était corrigé en 5.8.5 . Si vous êtes préoccupé par la rétrocompatibilité, je m'en tiendrais à l'option if( !keys %hash ) . Sinon, utilisez if( !%hash ) comme recommandé par d'autres.

22voto

DVK Points 63282

Plus simple :

if (!%hash) { 
    print "Empty";
} 

! impose un contexte scalaire, et le hachage évalué dans un contexte scalaire renvoie :

  • false s'il y a zéro clé (non défini dans la documentation mais retourne expérimentalement 0 )

  • Une chaîne de caractères indiquant le nombre de compartiments utilisés/alloués pour les clés >0, qui ne sera bien sûr PAS fausse (par exemple, "3/6").

0 votes

Non, il ne revient pas "false" ce qui serait une valeur vraie. Elle renvoie zéro.

2voto

Benjamin Krupp Points 698

"Meilleur" est un terme subjectif. Cependant, je dirais qu'un code plus facile à comprendre peut être qualifié de "meilleur". Pour cette raison, je conclus que !keys %hash est préférable, car tous ceux qui écrivent du code perl sauront ce que fait ce code et qu'il fonctionne. !%hash est quelque chose que je devrais au moins vérifier pour m'assurer qu'il fonctionne vraiment ou qu'il a seulement l'air de fonctionner. (La raison étant que la valeur de retour d'un hachage dans un contexte scalaire est plutôt déroutante alors que le comportement d'un tableau dans un contexte scalaire est bien connu et souvent utilisé).

Aussi, !keys %hash est sûr.

Donc non, il n'y a pas de meilleur moyen ou de moyen plus sûr de vérifier si un hachage est vide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X