Was ist der Unterschied zwischen einem hash und hash-Referenz in Perl?
Ich würde gerne richtig verstehen, hashes in Perl. Ich habe die Perl zeitweise für einige Zeit und meist, wenn ich muss es tun, es ist meistens im Zusammenhang mit text-Verarbeitung.
Und jedesmal, wenn ich zu tun haben mit hashes, es Durcheinander gebracht. Ich finde die syntax sehr kryptisch für hashes
Eine gute Erklärung von Hash und hash-Referenzen, Ihre Unterschiede, wenn es nötig ist etc. wäre sehr geschätzt werden.
*Hände Sie einen Apfel* behaupten, dass ein hash. *Hände Sie schriftliche Anweisungen, um einen Apfel in den Kühlschrank* ,ist eine hash-Referenz.
Sie könnten check-out Learning Perl's Kapitel über hashes.
Ich Wünsche mir, dass war eine Antwort, anstatt einen Kommentar, so dass ich konnte upvote Sie richtig.
danke, ich weiß es zu schätzen. ich habe es als Kommentar " dazu führen, dass die gestellte Frage für die syntax-Beispiele und so, und ich war zu faul, um im Wettbewerb mit gbacon Antwort.
Sie könnten check-out Learning Perl's Kapitel über hashes.
Ich Wünsche mir, dass war eine Antwort, anstatt einen Kommentar, so dass ich konnte upvote Sie richtig.
danke, ich weiß es zu schätzen. ich habe es als Kommentar " dazu führen, dass die gestellte Frage für die syntax-Beispiele und so, und ich war zu faul, um im Wettbewerb mit gbacon Antwort.
InformationsquelleAutor user855 | 2009-11-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen einfachen hash ist in der Nähe einer Reihe. Ihre Initialisierungen sogar ähnlich Aussehen. Zuerst das array:
Lassen Sie uns nun stellen die gleichen Informationen mit einer hash (aka assoziatives array):
Obwohl Sie denselben Namen haben, wird das array
@last_name
und die hash -%last_name
sind vollständig unabhängig voneinander.Mit dem array, wenn wir wissen wollen, Archie letzten Namen, die wir erfüllen müssen, eine lineare Suche:
Mit dem hash, es ist viel mehr direkte syntaktisch:
Sagen, wir wollen repräsentieren Informationen mit nur etwas reicher Struktur:
Referenzen vor kam, flache Schlüssel-Wert-hashes waren über das beste, was wir tun können, aber Hinweise ermöglichen
Intern, die Schlüssel und Werte von
%personal_info
sind alle skalaren, aber die Werte sind eine spezielle Art von skalaren: hash-Referenzen, erstellt mit{}
. Die Referenzen, die es uns ermöglichen, simulieren "multi-dimensional" - hashes. Zum Beispiel bekommen wir Wilma überBeachten Sie, dass Perl ermöglicht es uns auslassen Pfeile zwischen tiefgestellte Zeichen, so dass die oben ist äquivalent zu
Das ist eine Menge Tipparbeit, wenn Sie mehr darüber wissen möchten, Fred, so dass Sie vielleicht schnappen Sie sich eine Referenz, als eine Art cursor:
Weil
$fred
in dem snippet oben ist eine hashref, der Pfeil ist notwendig. Wenn Sie es weglassen, aber mit bedacht aktiviertuse strict
Ihnen helfen, fangen diese Arten von Fehlern, die der compiler wird sich beschweren:Perl-Referenzen sind ähnlich wie Zeiger in C und C++, aber Sie kann nie null sein. Zeiger in C und C++ Dereferenzierung erfordern und so tun, Referenzen in Perl.
C-und C++ - Funktion Parameter haben pass-by-value-Semantik: Sie sind nur Kopien, also Modifikationen, die nicht bekommen, an den Aufrufer zurück. Wenn Sie möchten, um die änderungen zu sehen, müssen Sie einen Zeiger übergeben. Können Sie diese Wirkung mit Referenzen in Perl:
Ohne den backslash,
add_barney
würde bekommen haben eine Kopie, die weggeworfen wird, sobald der sub zurück.Beachten Sie auch, dass die "Fett-Komma" (
=>
) vor. Es autoquotes der string auf der linken und macht hash-Initialisierungen weniger syntaktisch laut.void f(DataType & arg)
gehtarg
durch einen Verweis und erfordert nicht dereferenzieren, um den Zugriff oder ändern.Das ist, wenn Sie an einem reference, erklärt
&
, die eine 'Art' ein alias. Die Semantik ist pass-by-value.Ein toller post :). Ein Kommentar-vielleicht ein Warnhinweis wäre würdig, dass
@_
Aliase Argumente, so man kann ändern Sie von der sub (außer für die hash-Schlüssel)?InformationsquelleAutor Greg Bacon
Im folgenden wird veranschaulicht, wie Sie verwenden können, eine Raute und eine hash-Referenz:
Siehe auch perldoc perldsc.
%hash
zu beschreiben, einen hash. Es wäre eine gute Idee, um Ihre entsprechenden%hash
als%favorite
gerade zu fahren den Punkt nach Hause. Die print-Anweisung würde dann so etwas wieprint "My favorite toy is the $favorite{toy}";
InformationsquelleAutor Alan Haggai Alavi
Link: Unterschied zwischen hash und hash-ref in perl - Ubuntu-Forum
Unterschied ist auch in der syntax für das löschen. Wie C, perl arbeitet, wie dies für Hashes:
und für die Hash-Referenzen
Den Perl Hash-Howto ist eine großartige Ressource zu verstehen Hashes versus Hash mit Hash-Referenzen
Es ist auch ein weiterer link hier mehr Informationen zu perl und Referenzen.
InformationsquelleAutor
Sehen perldoc perlreftut die auch zugänglich auf Ihrem eigenen computer-Befehlszeile.
perldoc perlreftut
installiert ist nebenperl
auf dem OP-computer. Das ist immer das Genaueste Beleg für die bestimmten version von perl der OP ist mit. Der link ist nur als Höflichkeit. Also, in diesem Sinne, Perl-Dokumentation URLs sind genauso wie Referenzen. Die Inhalte auf der link kann sich ändern, aber der link wird immer auf die "Perl-Referenzen Lernprogramm". Nicht alle links sind gleich. FYI.InformationsquelleAutor Sinan Ünür