Thread Neue Registry mit alter vergleichen (27 answers)
Opened by s8jascho at 2012-08-17 09:25

topeg
 2012-08-21 11:11
#161166 #161166
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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.

View full thread Neue Registry mit alter vergleichen