Warum sind manche hashes initialisiert mit geschweiften Klammern, und einige mit Klammern?
Ich bin auf der Suche in der folgende code demonstriert verschachtelte hashes:
my %HoH = (
flintstones => {
husband => "fred",
pal => "barney",
},
jetsons => {
husband => "george",
wife => "jane",
"his boy" => "elroy", # Key quotes needed.
},
simpsons => {
husband => "homer",
wife => "marge",
kid => "bart",
},
);
Warum ist es, dass der oberste hash (ab Zeile 1) initialisiert wird, mit Klammern, in der Erwägung, dass die sub-hashes initialisiert werden durch benutzen von geschweiften Klammern?
Kommen aus einem python-hintergrund muss ich sagen, Perl ist ziemlich seltsam :).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kommen aus einem Perl-hintergrund finde ich Perl schon sehr seltsam, auch.
Klammern verwenden, initialisieren Sie einen hash (oder ein array). Ein hash ist eine Zuordnung zwischen einem Satz von Saiten und einen Satz von skalaren Werten.
Klammern werden verwendet, um zu definieren, eine hash - Referenz. Alle Referenzen sind Skalare Werte.
Hashes nicht Skalare Werte. Da die Werte in einem hash muss werden Skalare, daher ist es nicht möglich, einen hash-Wert von einem anderen hash.
Aber wir können hash-Referenzen als Werte von einem anderen hash, da hash-Referenzen sind Skalare.
Und das ist, warum Sie sehen, Sie Klammern, um eine Liste von Listen mit geschweiften Klammern.
key3 => %foo
tun nicht das, was es scheint,key3 => \%foo
fügt einen Verweis und ist ein sehr einfacher Weg, um es zu tun, was man wollen in dieser situation.Der wesentliche Unterschied (....) wird verwendet, um eine hash. {....} wird verwendet, um eine hash - Referenz
In ein bisschen mehr detail - {....} macht ein anonymen hash und gibt eine Referenz darauf welches asigned zu den skalaren
$hash_ref
bearbeitet zu geben, ein bisschen mehr detail
Erste, der parens nichts tun, aber ändern Vorrang hier. Sie haben nie nichts zu tun mit der Listen-Erstellung, hash-Erstellung oder hash-Initialisierung.
Zum Beispiel die beiden folgenden Zeilen sind zu 100% entspricht:
Zum Beispiel die beiden folgenden Zeilen sind zu 100% entspricht:
Zweite, nicht initialisieren Sie einen hash mit
{ }
; erstellt einen hash verwenden.{ }
entsprichtmy %hash;
, außer, dass der hash ist anonym. In anderen Worten,ist im Grunde das gleiche wie
(aber nicht erstellen Sie einen lexikalischen scope).
Anonyme hashes lässt sich eins zu schreiben
statt