SvenB: dereferenzieren

Beitrag lesen

Folgende Situation:

In einem Array (@refarray) befinden sich Referenzen auf weitere Arrays (@test1,@test2). Die Struktur dieses Arrays (also die Verwendung von Referenzen innerhalb des Arrays) lässt sich nicht vermeiden oder umgehen.

Nun muss ich einige Werte des Arrays für einen weiteren Schritt innerhalb einer Schleife modifizieren. Dabei soll das originale Array jedoch nicht verändert werden sondern nur eine Kopie davon.
Schliesslich möchte ich bei jedem Schleifendurchlauf wieder die selbe Ausgangssituation haben.

Leider modifiziere ich jedoch mit jeder Änderung der Kopie gleichzeitig das Original so dass ich die ursprünglichen Daten verliere. Mich würde nun interessieren wie ich eine vollständig abgekoppelte "Arbeitskopie" des ursprünglichen Arrays erstellen kann.

Da das alles etwas verwirrend ist , habe ich ein kleines Beispielscript geschrieben :

#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
use Data::Dumper;
print "Content-Type: text/plain\n\n";

@test1 = ("wert11","wert12");
@test2 = ("wert21","wert22");
@refarray = (@test1,@test2);

print "Original-Array vorher:\n";
print Dumper(@refarray);

for($a=1 ; $a<=2 ; $a++){
 my @testarray = @refarray;
 print "Durchgang $a:\n";
 for($i=0 ; $i<@testarray ; $i++){
  push(@{$testarray[$i]},"add".$a.$i);
 };
 print Dumper(@testarray)."\n\n";
};

print "Original-Array nachher:\n";
print Dumper(@refarray);
############################################################

schaut man sich die Ausgabe an, so stellt man fest dass beim zweiten Durchgang auch die hinzugefügten Werte des ersten Durchgangs enthalten sind obwohl ich @refarray überhaupt nicht verändert habe.
my @testarray = @refarray;
Am Ende sieht man jedoch bei der Ausgabe "Original-Array nachher" dass @refarray die selben Änderungen erfahren hat wie @testarray

Ich würde mich freuen wenn jemand einen guten Rat für mich hätte.