#!/usr/bin/perl use strict; use warnings; use Data::Dumper; sub deep_clone($); my @a=(0,1,2,3,4,5,{ich=> [1,2,3]}); print Dumper(\@a); my @d=@{deep_clone(\@a)}; $d[6]{ich} = 'du'; $d[7]=8; print Dumper(\@a,\@d); sub deep_clone($){ my ($ref) = @_; my $target; unless(ref($ref)){ $target = $ref; } elsif(ref($ref) eq 'ARRAY'){ for my $idx(0..scalar(@$ref)-1){ $target->[$idx] = deep_clone($ref->[$idx]); } } elsif(ref($ref) eq 'HASH'){ for my $key(keys %$ref){ $target->{$key} = deep_clone($ref->{$key}); } } return $target; }