In meinem Code tue ich:
%Vor% und dann ändere ich @data
.
Das Problem ist, dass sich @data_new
immer auch ändert.
Es ist wie @data_new
ist nur ein Verweis auf, was in @data
ist.
Wie erstelle ich eine Kopie eines Arrays, das keine Referenz, sondern eine neue Kopie aller Werte ist?
@data
ist übrigens ein zweidimensionales Array.
Der Code, den Sie haben, kopiert den Inhalt der Liste in eine neue Liste. Wenn Sie jedoch Referenzen in der Liste speichern (und Sie müssen ein zweidimensionales Array in Perl erstellen), werden die Referenzen kopiert, nicht die Objekte, auf die die Referenzen verweisen. Wenn Sie also eines dieser referenzierten Objekte über eine Liste bearbeiten, sieht es so aus, als ob sich die andere Liste ändert, obwohl beide Listen eigentlich nur identische Referenzen enthalten.
Sie müssen eine "tiefe Kopie" der Liste erstellen, wenn Sie alle referenzierten Objekte auch duplizieren möchten. Siehe dazu Frage für einige Möglichkeiten, dies zu erreichen.
Wenn Sie von einem zweidimensionalen Array ausgehen, sollte dies funktionieren:
%Vor% Siehe perlfaq4's " Wie drucke oder kopiere ich eine rekursive Datenstruktur? . Verwenden Sie die Methode dclone
von Storable
.