Mit hash als Referenz ist veraltet
Suchte ich ALSO vor diese Frage zu stellen, ich bin völlig neu hier und habe keine Ahnung, wie man diese Fehler. Damit meine ich Perl-Sprache.
Wenn ich diese
%name->{@id[$#id]} = $temp;
Bekomme ich die Fehlermeldung Using a hash as a reference is deprecated
Versuchte ich
$name{@id[$#id]} = $temp
aber konnte Sie nicht bekommen keine Ergebnisse.
Irgendwelche Vorschläge?
- Welche Art von variable "name"? Wo wird es zuerst initialisiert und welche Daten enthält Sie? Kann dir nicht helfen ohne zu wissen. Obwohl, ich werde sagen, dass -> ist der dereference-operator, funktioniert es nur auf $ - Skalare, die enthalten einen Verweis, nicht % - hashes, damit der Fehler.
- Initialisiere ich es oben im code by doing
my %name;
- Versuchen Sie ` $name{$id [$#- id]} = $temp `
- stackoverflow.com/questions/5928523/... stackoverflow.com/questions/6265673/... stackoverflow.com/questions/10705876/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den richtigen Weg, um den Zugriff auf ein element des hash -
%name
ist$name{'key'}
. Die syntax%name->{'key'}
galt in Perl v5.6 aber inzwischen veraltet.Ähnlich, um Zugriff auf das Letzte element eines Arrays
@id
Sie schreiben sollte$id[$#id]
oder auch einfach$id[-1]
.Deine zweite Variante sollte funktionieren, und Ihre Unfähigkeit, um den Wert abzurufen ist eine unabhängige Grund.
Schreiben
und
zeigt
test
richtigwar schon immer buggy. Es nicht tut, was es tun sollte. Als solche, es jetzt eine Warnung, wenn Sie versuchen, es zu benutzen. Die richtige Art und Weise zu index-hash ist
als Sie bereits glauben.
Nun, sagen Sie
nicht funktioniert, aber wenn es so ist, es ist, weil der Fehler woanders im code. Dass code, der definitiv funktioniert
Wie die Warnung sagt, obwohl, der richtige Weg, um den index eines Arrays nicht
Es ist eigentlich
Schließlich, der einfachste Weg, um das Letzte element eines array ist die Verwendung von index
-1
. Das bedeutet, dass Ihr code sollteDie beliebte Antwort ist einfach nicht zu dereferenzieren, aber das ist auch nicht korrekt. In anderen Worten
%$hash_ref->{$key}
und%$hash_ref{$key}
sind nicht austauschbar. Ersteres ist erforderlich, um Zugriff auf eine hash-Referenz verschachtelt als ein element in einem anderen hash-Referenz.Seit vielen Monden wurde es üblich, statt zu nest hash-Referenzen. In der Tat gibt es mehrere Module, die Daten analysieren und speichern es in dieser Art von Datenstruktur. Sofort missbilligt das Verhalten ohne Modul-updates war nicht eine gute Sache. Mal meine Daten ist gefangen in einer verschachtelten hash -, und der einzige Weg es zu bekommen ist, etwas zu tun.
weil ich nicht
mehr.
Ja das oben ist ein wenig seltsam, aber das erstellen von neuen Variablen nur zu vermeiden, den Zugriff auf eine Datenstruktur in einer bestimmten Weise schlechter ist. Bin ich etwas fehlt?
Wenn Sie möchten, dass ein Element aus einem array oder hash verwenden $. Für eine Liste der Elemente, die Verwendung von @ und % beziehungsweise. Ihr nutzen @ als Referenz zurückgegeben wird eine Liste, anstatt einer Sache, die perl haben kann interpretiert werden als ein hash.
Dieser code zeigt Ihre Referenz ein hash von arrays.
gibt '102'
%
zu extrahieren Sie eine Liste von nichts. Und Perl wird nie interpretieren die Liste als hash.$ perl -e '%these=qw(foo 0 bar 1);print join(":", %these)'
funktioniert gut in beiden Punkten.