use Data::Dumper; { my $ref = [ 'moo' ]; my %h1 = ( key1 => 'val1', key2 => $ref ); print("$_ => $h1{$_}\n") foreach (keys(%h1)); # prints: # key1 => val1 # key2 => ARRAY(0x1abf040) print Dumper \%h1; # { # 'key1' => 'val1', # 'key2' => [ # 'moo' # ] # } my %h2 = %h1; # Shallow copy. delete($h2{'key1'}); $h2{'foo'} = 'bar'; $h2{'key2'}[0] =~ s/m/b/; print("$_ => $h1{$_}\n") foreach (keys(%h1)); # prints: # key1 => val1 # key2 => ARRAY(0x1abf040) # and not: # foo => bar # key2 => ARRAY(0x1abf040) print Dumper \%h1; # { # 'key1' => 'val1', # 'key2' => [ # 'boo' # ] # } }