Basierend auf meinem derzeitigen Verständnis von Hashes in Perl würde ich erwarten, dass dieser Code "Hallo Welt" ausgibt. Es druckt stattdessen nichts.
%Vor%Ich nehme an, dass ein Hash genau wie ein Array ist, also warum kann ich einen Hash nicht dazu bringen, einen anderen zu enthalten?
Sie sollten immer "use strict" verwenden. in Ihrem Programm.
Verwenden Sie Referenzen und anonyme Hashes.
{%b}
erstellt einen Verweis auf die Kopie von Hash %b
. Sie müssen hier kopieren, weil Sie es später leeren.
Hashes von Hashes sind schwierig, um das erste Mal richtig zu machen. In diesem Fall
%Vor%bringt Sie dorthin, wo Sie hin wollen.
Siehe perldoc perllol
für die Details zu zweidimensionalen Datenstrukturen in Perl.
Kurze Antwort: Hash-Schlüssel können nur mit einem Skalar verknüpft werden, nicht mit einem Hash. Um zu tun, was Sie wollen, müssen Sie Referenzen verwenden.
Anstatt die Datenstrukturen auf mehreren Ebenen neu zu hashen (heh), schlage ich vor, dass Sie perlreutut lesen. Perlref ist vollständiger, aber es ist auf den ersten Blick ein wenig überwältigend.
Mike, Alexandr ist die richtige Antwort.
Auch ein Tipp. Wenn Sie nur lernen Hashes Perl hat ein Modul namens Data :: Dumper, die Ihre Datenstrukturen für Sie hübsch drucken kann, das ist wirklich praktisch, wenn Sie überprüfen möchten, welche Werte Ihre Datenstrukturen haben.
%Vor%Wenn Sie dies ausdrucken, wird
angezeigt %Vor% Perl glättet gerne Ihre Datenstrukturen. Das ist oft eine gute Sache ... zum Beispiel endet (@options, "another option", "yet another")
als eine Liste.
Wenn Sie wirklich eine Struktur innerhalb einer anderen haben wollen, muss die innere Struktur eine Referenz sein. Wie so:
%Vor%Die geschweiften Klammern bezeichnen einen Hash, den Sie mit Werten aus% b füllen und den Sie als Referenz anstelle eines geraden Hashes erhalten.
Du könntest auch sagen
%Vor%aber Änderungen an% b ändern auch $ a {1}.
Tags und Links perl hash perl-data-structures