comment vérifier si un hachage de référence est vide en perl
J'ai besoin de tester, si mon hashref contient 0 éléments.
J'ai utilisé ce code:
$self = { fld => 1 };
%h = ( "a" => "b" );
$self->{href} = { %h };
print STDERR $self->{href}{ "a" };
print STDERR "\n";
print "size of hash: " . keys( %h ) . ".\n";
print "size of hashref: " . keys( $self->{href} ) . ".\n";
Il fonctionne bien avec perl 5.16, mais échoue avec perl 5.10:
Type of arg 1 to keys must be hash (not hash element) at - line 7, near "} ) "
Execution of - aborted due to compilation errors.
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez utiliser
pour une table de hachage, vous pouvez utiliser
pour une référence, il est donc
Remarque: Dans certaines versions de Perl,
keys
accepte une référence. Cependant, c'était une fonctionnalité expérimentale qui a été abandonnée. Il ne faut pas l'utiliser.if (!keys $self->{'href'}) {}
dans l'instruction if. Est va fonctionner de la même dans toutes les versions de Perl?keys
est le cas, allez lire le docs. Si après cela vous avez encore besoin de quelques éclaircissements, Poser une Question.perldoc -f
à la recherche d'objets internes. 🙂%{ $hash }
?keys(%{ $ref })
pour vérifier si une valeur de hachage est vide. Pourquoi ne pas simplement utiliser%{ $hash }
pour vérifier si une valeur de hachage est vide? Oh, vous savez qu'il y a une chasse aux sorcières dans les anciennes version de Perl? Pourquoi ne précisez-vous pas cela? Pourquoi sont-boulochage sur OT-vous des commentaires? C'est exactement le désordre, j'ai été la règle et j'ai été en essayant d'éviter les!Utilisation des références avec des fonctions internes comme
keys
est supporté seulement dans les nouvelles versions d'œuvres méconnues. Pour un maximum de compatibilité, vous devez déréférencement d'abord:Vous avez besoin de déréférencement d'elle comme une table de hachage:
Pour la TIMTOWTDI, pour vérifier si elle a toutes les clés, vous n'avez pas besoin
keys
:Pour savoir si une table de hachage a des éléments, vous venez de l'utiliser dans un contexte scalaire:
ou
scalar keys %h
accomplit le même but, en comptant les clés dans%h
, mais c'est mieux de demander ce que vous voulez savoir.De toute façon, cependant,
%h
est un hachage et pas un hashref. (Même si certaines versions de Perl ne tolérer un hashref comme un argument dekeys
.) Donné une expressionEXPR
qui donne un hashref, vous obtenez à la hash en disant%{ EXPR }
. Mettre cela ensemble avec votre exemple de code, nous obtenons