+ foreach my $entry (@{ $src }) {
+ my $exists = !!$dumped{refaddr($entry) // ''};
+ push @{ $dumped{$addr} }, $clone_for_dump->($entry);
+
+ weaken($dumped{$addr}->[-1]) if $exists;
+
+ }
+
+ } elsif (ref($src) =~ m{^(?:HASH|Form|SL::.+)$}) {
+ $dumped{$addr} = {};
+
+ foreach my $key (keys %{ $src }) {
+ my $exists = !!$dumped{refaddr($src->{$key}) // ''};
+ $dumped{$addr}->{$key} = $clone_for_dump->($src->{$key});
+
+ weaken($dumped{$addr}->{$key}) if $exists;
+ }
+ }
+
+ return $dumped{$addr} // "$src";
+ };
+
+ $variable = $clone_for_dump->($variable);