J'utilise le code suivant pour vérifier si le hachage est vide. Existe-t-il une meilleure méthode et est-ce sûr à utiliser?
if (!keys %hash) { print "Empty";}
if (%hash)
Fonctionnera très bien.
De perldoc perldata :
Si vous évaluez un hachage dans un contexte scalaire, il renvoie faux si le hachage est vide. S'il existe des paires clé/valeur, il renvoie vrai; plus précisément, la valeur renvoyée est une chaîne composée du nombre de compartiments utilisés et du nombre de compartiments alloués, séparés par une barre oblique.
Il y avait n bug qui faisait que les hachages liés dans le contexte scalaire retournaient toujours faux. Le bug était corrigé en 5.8.5 . Si vous êtes préoccupé par la rétrocompatibilité si loin, je resterais avec if( !keys %hash )
. Sinon, utilisez if( !%hash )
comme recommandé par les autres.
Plus simple:
if (!%hash) {
print "Empty";
}
! impose un contexte scalaire, et le hachage évalué dans un contexte scalaire renvoie:
false
s'il n'y a aucune clé (non définie dans la documentation mais renvoie expérimentalement 0
Une chaîne indiquant combien de compartiments utilisés/alloués sont utilisés pour> 0 clés, ce qui ne sera bien sûr PAS faux (par exemple "3/6")
"Mieux" est un terme subjectif. Cependant, je dirais qu'un code plus facile à comprendre peut être décrit comme "meilleur". Pour cette raison, je conclus que !keys %hash
est mieux, car tous ceux qui écrivent du code Perl sauront ce que fait ce code et qu'il fonctionne. !%hash
est quelque chose au moins que je devrais rechercher pour m'assurer que cela fonctionne vraiment ou que cela semble fonctionner. (La raison étant que la valeur de retour d'un hachage dans un contexte scalaire est assez déroutante alors qu'un comportement de tableaux dans un contexte scalaire est bien connu et souvent utilisé.)
Également, !keys %hash
est enregistré.
Donc non, il n'y a pas de meilleur moyen de vérifier si un hachage est vide.