c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "my @ra = (1, 2, 3); my %hash = ( a => 'ok', b => \@ra, ); ;; S(\%hash); ;; dd \@ra; dd \%hash; ;; sub S { my $hashref = shift; my %hashcopy = %$hashref; ;; return do_something_with(\%hashcopy); } ;; sub do_something_with { my $hashref = shift; ;; $hashref->{b}[0] = 9; $hashref->{b}[1] = 9; $hashref->{b}[2] = 9; return 1; } " [9, 9, 9] { a => "ok", b => [9, 9, 9] }