Sie haben die Antwort auf Ihre Frage bereits erhalten, verwenden Sie nicht {}
da dies einen anonymen Hash-Verweis erzeugt.
Aber da ist noch die Frage, von der Sie nicht wussten, dass Sie sie gestellt haben.
Was ist der Unterschied zwischen einem Array und einer Liste in Perl?
In Ihrer Frage verwenden Sie den Begriff "Liste", als ob er mit dem Begriff "Array" austauschbar wäre, aber die Begriffe sind nicht austauschbar. Es ist wichtig zu verstehen, worin der Unterschied besteht.
Ein Array ist eine Art von Variable. Sie können ihm Werte zuweisen. Sie können Verweise auf sie nehmen.
Eine Liste ist eine geordnete Gruppe von null oder mehr Skalaren, die erstellt wird, wenn ein Ausdruck in einem Listenkontext ausgewertet wird.
Was sagen Sie?
Ok, denken Sie an den Fall von my $foo = (1,2,3)
. Hier $foo
ist ein Skalar, und somit ist der Ausdruck (1,2,3)
wird in einem skalaren Kontext ausgewertet.
Oberflächlich betrachtet ist es leicht zu erkennen, dass (1,2,3)
und sagen, das sei eine wörtliche Liste. Aber das ist sie nicht.
Es handelt sich um eine Gruppe von literalen Werten, die mit der Komma-Operator . In einem skalaren Kontext gibt der Komma-Operator den rechten Wert zurück, so dass wir in Wirklichkeit Folgendes haben ((1 ,2),3)
die zu ((2),3)
und schließlich 3
.
Jetzt my @foo = (1,2,3)
ist sehr unterschiedlich. Die Zuweisung an ein Array erfolgt in einem Listenkontext, also werten wir (1,2,3)
im Listenkontext. Hier fügt der Komma-Operator beide Seiten in die Liste ein. Wir haben also ((1,2),3)
was zu folgenden Ergebnissen führt (list_of(1,2),3)
y luego list_of(list_of(1,2),3)
Da Perl Listen abflacht, wird daraus list_of(1,2,3)
. Die resultierende Liste wird in @foo
. Beachten Sie, dass es keine list_of
Operator in Perl zu verwenden, versuche ich, zwischen dem, was man sich gemeinhin unter einer literalen Liste vorstellt, und einer tatsächlichen Liste zu unterscheiden. Da es keine Möglichkeit gibt, eine tatsächliche Liste in Perl direkt auszudrücken, musste ich eine erfinden.
Was bedeutet das alles für jemanden, der Perl gerade erst lernt? Ich werde es auf ein paar wichtige Punkte reduzieren:
- Erfahren Sie mehr über und achten Sie auf Kontext .
- Denken Sie daran, dass Ihre Array-Variablen Arrays und keine Listen sind.
- Machen Sie sich nicht zu viele Sorgen, wenn dieses Zeug scheint verwirrend zu sein .
- DWIM tut es, meistens - die meiste Zeit werden die richtigen Dinge passieren, ohne sich um die Details zu kümmern.
Während Sie über Fragen des Zusammenhangs nachdenken, sollten Sie sich diese Links ansehen: