Das kann eine dumme Frage sein ... Der folgende Code gibt den Inhalt von @arrayref
bzw. @arraycont
aus. Beachten Sie den Unterschied zwischen ihnen und die Art, wie ihre Werte zugewiesen sind. Ich weiß, was das anonyme Array macht, aber kann jemand erklären, warum es einen Unterschied gibt?
Vielen Dank.
%Vor%Ausgaben
%Vor%Dies erstellt eine flache Kopie des Arrays:
$arraycont[0] = [@array];
Während dies nur eine Referenz darauf erstellt:
$arrayref[0] = \@array;
Da Sie das Array später ändern:
@array = qw(5 6 7 8);
arrayref
zeigt immer noch auf den gleichen Array-Speicherort im Speicher und druckt bei der Dereferenzierung in den print-Anweisungen die aktuellen Array-Werte 5 6 7 8
.
Der erste Block speichert die Adresse von @array . Referenzen sind wie Live-Streaming , Sie erhalten den aktuellen Status. Wenn Sie also einen Verweis auf @array, wie \ @array, erstellen, erhalten Sie beim Aufheben der Referenz immer die @array Punkte . Wenn Sie die Verweisung auf @array ablehnen, wird (5 6 7 8)
angezeigtWenn Sie [@ array] verwenden, wird das Live-Streaming auf Ihrer Festplatte aufgezeichnet. Wenn Sie also den aufgezeichneten Inhalt (wieder) abspielen, bekommen Sie, was war zum Zeitpunkt der Aufnahme gestreamt. Wenn Sie also $ arraycont [0] angeben, erhalten Sie, was @array zum Zeitpunkt des Kopierens hatte, (1 2 3 4)