Thread Umfangreiche Hash Referenz mit Regex und Code kopieren (20 answers)
Opened by bianca at 2016-02-26 09:38

clms
 2016-02-26 23:02
#183997 #183997
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
Bist Du Dir sicher, dass mit clone auch der Code kopiert wurde? Oder nur die Coderef? An Deinem deep-copy-Beispiel kann man das nicht unterscheiden.

Hier ist ein Code-Beispiel, wie man es herausbekommt:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use Clone 'clone';

my $alt = {
  array => [1,2],
  code => sub{ printf "alt %s\n", shift }
};

my $neu = clone $alt;

if ($neu->{array} eq $alt->{array}) {
  say "Das Array wurde nicht kopiert";
} else {
  say "Das Array wurde kopiert";
}

if ($neu->{code} eq $alt->{code}) {
  say "Die Funktion wurde nicht kopiert";
} else {
  say "Die Funktion wurde kopiert";
}

Danach wurde bei mir nur das Array aber nicht der Code dupliziert.

Damit kommen wir zur nächsten Frage:
Warum soll der Code kopiert werden?
Im vorliegenden Beispiel is es völlig egal, ob die sub kopiert wird oder nicht. Eine 1:1 Kopie der Funktion würde genau das Gleiche machen wie die Originalfunktion. Es ist also egal, ob das Original oder eine Kopie referenziert wird.

Allerdings könnte sich ein Unterschied ergeben, wenn die Funktion state verwendet, z.B. mit sub {state $i; ++$i}
Da zeigt sich beim Ausprobieren, dass $alt und $neu keine getrennten States verwenden.

View full thread Umfangreiche Hash Referenz mit Regex und Code kopieren