Ajouter un hachage à un tableau
J'ai un tableau comme ça,
@switch_ports = ()
et souhaitez ajouter 50 instances de cette empreinte, à la switch_ports tableau
%port = (data1 => 0, data2 => 0, changed => 0)
cependant, si je pousse mon hachage pour le tableau
push(@switch_ports, %port)
mais si je les fais imprimer @switch_ports
Je viens de voir
data10data20changed0
donc, il semble juste être ajouté à la matrice, (joindre)
et si j'essaye et je boucle le tableau et imprimer les clés, il échoue également.
Je pense que je vais retardé de brisé ma tête sur le bureau si dur.
1 - Pouvez-vous stocker une valeur de hachage dans un tableau?
2 - Pouvez-vous disposez d'un tableau de hachages?
Essayer de l'obtenir...
switchports
0
data1
data2
changed
1
data1
....
ainsi
foreach $port (@switchport) {
print $port['data1']
}
retrouvera tous les data1 pour toutes les valeurs de hachage dans le tableau.
Oui, je n'ai pas à Perl
source d'informationauteur Wizzard
Vous devez vous connecter pour publier un commentaire.
En Perl, tableau de hachage et des membres doit être une valeur unique. Avant de Perl 5.0, il n'y avait pas de moyen (facile) de faire ce que vous voulez.
Cependant, en Perl 5, vous pouvez maintenant utiliser une référence à votre hash. Une référence est tout simplement l'emplacement de mémoire où l'élément est stocké. Pour obtenir une référence, vous placez une barre oblique inverse devant de la variable:
Ainsi:
Et, vous n'avez pas à créer
$port_ref
:Pour obtenir la valeur réelle de la référence, il suffit de placer le symbole de retour sur le devant:
Un autre raccourci:
Ou, encore plus courte, de déférence, comme vous allez le long:
Et un peu syntaxique édulcorant. Il signifie la même chose, mais plus facile à lire:
Prendre un coup d'oeil à Perldoc de perlreftut et perlref. Le premier est un tutoriel.
Lorsque vous essayez:
Ce qui se passe réellement est:
Car les tableaux et les tables de hachage sera pause automatiquement dans leurs éléments lorsque utilisé dans un contexte de liste.
Lorsque vous souhaitez créer 50 instances de hachage, il n'est pas une bonne idée d'utiliser une référence à un hachage comme d'autres l'ont suggéré, comme cela ne fera que créer 50 références différentes à la même de hachage. Qui crash et brûler, pour des raisons évidentes.
Ce que vous avez besoin est quelque chose comme:
Qui va ajouter 50 anonyme unique hachages pour le tableau. Les accolades indique construction de anonyme de hachage, et retourne un scalaire référence.
ETA: Votre exemple de la façon d'accéder à ces données est incorrect.
À l'aide d'un indice sur une variable scalaire va tenter d'accéder à un tableau dans cet espace, pas un scalaire. En perl, il est possible d'avoir deux variables distinctes
$port
et@port
. Les crochets sont utilisés pour les tableaux, pas les tables de hachage. Lors de l'utilisation de références, vous devez également utiliser la flèche de l'opérateur:$port->{data1}
. Donc:Vous pouvez stocker un référence à une valeur de hachage dans un tableau:
ou
Puis itérer avec, disons,
Voir
man perlref
.À simplifier pour ceux qui utilisent cette question pour trouver une approche générale - comme dans la Rubrique Question. Mysql thème:
À boucle et impression: l'impression
ou
}