Thread Neue Registry mit alter vergleichen
(27 answers)
Opened by s8jascho at 2012-08-17 09:25
Clone ist schon der richtige weg. Leider geht das Modul zu gründlich vor. Das heißt es kopiert auch versteckte Objekte die weiterhin eine Verbindung zur Registry haben. Die Lösung ist ein ganz einfaches Clone selbst zu schreiben:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 sub my_clone { my $ref=shift; my $ret; my $type=ref($ref); if( $type eq 'ARRAY' ) { $ret=[]; for(@$ref) { push(@$ret,my_clone($_)); } } elsif( $type eq 'HASH' ) { $ret={}; while(my ($k,$v)=each(%$ref) ) { $ret->{$k}=my_clone($v); } } elsif($type) { die "Can't clone $type\n"; } # <= Nur Arrays und Hashes else { $ret="$ref"; } # <= um auch die letzten versteckten Objekte zu eleminieren return $ret; } Aufruf: my $copy=my_clone($original); Das ist im Vergleich zu Clone fürchterlich langsam und unvollständig, sollte aber machen was du dir wünschst. |