Perl: Array-Referenz versus anonymes Array

8

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%     
wen.huang 01.05.2012, 04:21
quelle

2 Antworten

11

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 .

    
yamen 01.05.2012, 04:27
quelle
3

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)

angezeigt

Wenn 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)

    
tuxuday 01.05.2012 07:44
quelle

Tags und Links