The sub fiddleHash is only supposed to alter hash2 but it also alters hash1use strict; sub fiddleHash($) { my ($ref_hash) = @_; delete $ref_hash->{Quantity}{x}; } sub displayHash($) { my ($ref_Hash) = @_; foreach (keys %{$ref_Hash->{Quantity}}) { print "$_:$ref_Hash->{Quantity}{$_}\n"; } } my %hash1 = ( Quantity => { x => 1, y => 2 } ); my %hash2 = %hash1; print "hash1 before call\n"; print displayHash(\%hash1); print "hash2 before call\n"; print displayHash(\%hash2); fiddleHash(\%hash2); print "hash1 after call\n"; print displayHash(\%hash1); print "hash2 after call\n"; print displayHash(\%hash2);
hash1 before call y:2 x:1 hash2 before call y:2 x:1 hash1 after call y:2 hash2 after call y:2
In reply to changing copy of a hash changes original by edo
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |