Durchlaufen hash-Werte in perl
Habe ich einen hash mit sagen wir mal 20 Werten.
Es initialisiert diese Weise:
my $line = $_[0]->[0];
foreach my $value ($line) {
print $value;
}
Wenn ich jetzt versuche, den Wert von jedem hash in $line steht:
Verwendung von nicht initialisierten Wert in gedruckter Form an file.pl Zeile 89
Gibt es eine Möglichkeit zu Durchlaufen und jeder Wert einen hash?
Ich habe auch versucht es mit:
my %line = $_[0]->[0];
foreach my $key (keys %line) {
print %line->{$key};
}
Aber das ist auch nicht funktioniert:
Referenz gefunden, wo sogar die Größe der Liste erwartet file.pl in Zeile 89
Jemand weiß, was zu tun ist? Es sollte nicht so schwierig sein...
Ich bin verwirrt. Sicher scheint mir, als ob Sie initialisiert haben ein Skalar, kein hash.
Und in deinem zweiten Beispiel, Sie versuchen, machen es zu einem hash, aber du bist immer noch die Zuweisung eines skalaren - vielleicht ist es ein hash-ref?
Mit dem Perl-debugger und drucken Sie Ihre Argumente mit der
Und in deinem zweiten Beispiel, Sie versuchen, machen es zu einem hash, aber du bist immer noch die Zuweisung eines skalaren - vielleicht ist es ein hash-ref?
Mit dem Perl-debugger und drucken Sie Ihre Argumente mit der
x
Befehl.
InformationsquelleAutor baklap | 2010-11-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
$line
im ersten Beispiel ist ein Skalar, kein hash.Wenn es eine hash-Referenz, Dereferenzierung mit
%{$line}
.InformationsquelleAutor Christoffer Hammarström
Zur Iteration über die Werte in einem hash:
InformationsquelleAutor Grey Panther
Zuerst müssen Sie verstehen, den Unterschied zwischen einem hash und hash-Referenz.
Ihre erste Zuordnung
$_[0]->[0]
etwas bedeutet wie : Nimmt das erste argument der Funktion current ($_[0]
), dereference (->
) und betrachten es als ein array und ruft es der erste Wert ([0]
). Dieser Wert kann nicht sein, eine Liste oder einen hash, es muss ein Skalar (string, int, float, reference).Hier einige Beispiel:
Entnehmen Sie bitte http://perldoc.perl.org/perlreftut.html für weitere details.
$_[0]
ist nicht eine Funktion. Es ist das erste (Skalare) element von@_
. So$_[0]->[0]
— das ist das gleiche wie$_[0][0]
und${ $_[0] }[0]
— dauert, dass die ersten Skalare element der@_
, verstünde es sich um eine Referenz auf ein array, und gibt das erste element der vermeintlich referenzierte array.Nie gesagt, dass $_[0] wurde eine Funktion.
InformationsquelleAutor OMG_peanuts
Die Warnung sagt Ihnen, dass es nichts bei
$_[0]->[0]
. Es ist nicht sterben und sagen Sie, dass Sie die Indizierung nichts, so$_[0]
ist wahrscheinlich eine arrayref, aber nichts ist in den ersten slot--oder vielleicht ist es deutete auf ein leeres array.BLAH(0x80af74)
. (Wo "BLA" ist ein "ARRAY", "HASH", "SKALARE", "REF", "GLOB", "IO", ... )Mein Vorschlag ist, dass Sie dies tun:
und betrachten Sie die Ausgabe.
Sobald Sie haben eine hashref an
$_[0]->[0]
, wenn dann müssen Sie eine Schleife durch den hash, der beste Weg ist:sehen
Schließlich, es scheint, dass Sie haben einige Siegel Verwirrung. Sehen Sie den letzten Teil von diesem link für eine anständige versucht zu erklären, dass das Siegel (
'$'
,'@'
,'%'
) nicht Teil des namens einer Variablen, aber Indikatoren, was wir wollen, abgerufen werden. Perl-compilation leidenInformationsquelleAutor Axeman