Itérer sur les valeurs de hachage en perl
J'ai une table de hachage avec disons 20 valeurs.
Il est initialisé de cette façon:
my $line = $_[0]->[0];
foreach my $value ($line) {
print $value;
}
Maintenant, quand j'essaie d'obtenir la valeur de chaque hachage dans $ligne il est dit:
Utilisation de la valeur non initialisée à imprimer à file.pl ligne 89
Est-il un moyen pour itérer sur chaque valeur de hachage?
J'ai aussi essayé avec:
my %line = $_[0]->[0];
foreach my $key (keys %line) {
print %line->{$key};
}
Mais c'est aussi ne fonctionne pas:
Référence trouvé où même la taille de la liste prévue à file.pl à la ligne 89
Quelqu'un sait quoi faire? Il ne devrait pas être difficile...
- Je suis confus. Certain me semble que vous avez initialisé un scalaire, pas une table de hachage.
- Et dans ton deuxième exemple, vous essayez de faire une table de hachage, mais vous êtes toujours à l'attribution d'un scalaire - c'est peut-être un hachage ref?
- Utiliser le débogueur Perl et imprimer votre arglist à l'aide de la
x
de commande.
Vous devez vous connecter pour publier un commentaire.
$line
dans votre premier exemple est un scalaire, pas une table de hachage.Si c'est un hash de référence, de déréférencement avec
%{$line}
.Pour effectuer une itération sur les valeurs dans une table de hachage:
Tout d'abord, vous devez comprendre la différence entre une table de hachage, et un hachage de référence.
Votre affectation initiale
$_[0]->[0]
signifie quelque chose comme : Prend le premier argument de la fonction en cours ($_[0]
), déréférencement d'elle (->
) et le considérer comme un tableau et le récupère de la première valeur ([0]
). Cette valeur ne peut pas être une liste ou d'une table de hachage, il doit être un scalaire (string, int, float, référence).Voici quelques exemple:
Veuillez vous référer à http://perldoc.perl.org/perlreftut.html pour plus de détails.
$_[0]
n'est pas une fonction. C'est la première (scalaire) de l'élément de@_
. Donc$_[0]->[0]
— qui est le même que$_[0][0]
et${ $_[0] }[0]
— prend que le premier élément scalaire de@_
, il considère être une référence à un tableau, et renvoie le premier élément de cette putativement référencé tableau.L'avertissement est vous dire qu'il y rien à
$_[0]->[0]
. Ce n'est pas en train de mourir et de vous dire que vous êtes d'indexation rien, donc$_[0]
est probablement un arrayref, mais rien n'est dans le premier emplacement, ou peut-être qu'il pointe vers un tableau vide.BLAH(0x80af74)
. (Où "BLA" est l'un des "ARRAY", "HASH", "SCALAIRE", "REF", "GLOB", "IO", ... )Ma suggestion est que vous faites cela:
et ensuite chercher à la sortie.
Une fois que vous avez un hashref à
$_[0]->[0]
, alors si vous devez parcourir la table de hachage, la meilleure façon est:voir
chaque
Enfin, il semble que vous avez quelques sceau de la confusion. Voir la dernière partie de ce lien pour une vie décente pour tenter d'expliquer que les sigils (
'$'
,'@'
,'%'
) sont pas partie du nom d'une variable, mais les indicateurs de ce que nous voulons extraire. Perl compilation malheurs