Christian Kruse: dereferenzieren

Beitrag lesen

你好 SvenB,

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.

Was du da machst, ist eine sogenannte "shallow copy", eine flache Kopie: du kopierst zwar die Elemente des Arrays, aber nicht die Referenzen. Was du möchtest, ist eine "deep copy", eine tiefe Kopie: du möchtest auch Kopien der Referenzen. Das kannst du entweder per Hand machen, oder du nutzt das Modul Storable dafür:

  
use Data::Dumper;  
use Storable qw(dclone);  
  
@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 = @{dclone(\@refarray)};  
  print "Durchgang $a:\n";  
  
  for($i=0 ; $i<@testarray ; $i++){  
    push(@{$testarray[$i]},"add".$a.$i);  
  }  
  
  print Dumper(\@testarray)."\n\n";  
}  

再见,
 克里斯蒂安

--
Bauer sucht Frau! | Ich bin ja eigentlich kein Serien-Junkie…
Nur die Weisesten und die Dümmsten können sich nicht ändern.
http://wwwtech.de/