use v5.10; use Clone 'clone'; my $alt = { array => [1,2], code => sub{state $i; return ++$i } }; 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"; } say "alt1: ".($alt->{code}->()); # alt1: 1 say "alt2: ".($alt->{code}->()); # alt2: 2 say "neu1: ".($neu->{code}->()); # neu1: 3 - state von "alt" wird weiter inkrementiert, weil es die gleiche Funktion ist say "neu2: ".($neu->{code}->()); # neu1: 4 $neu->{code} = sub{state $i; return ++$i }; say "neu1-neu: ".($neu->{code}->()); # neu1-neu: 1 - jetzt ist es eine neue state-Variable say "neu2-neu: ".($neu->{code}->()); # neu2-neu: 2 if ($neu->{code} eq $alt->{code}) { say "Die Funktion ist noch die gleiche"; } else { say "Die Funktion ist eine andere"; }