edo has asked for the wisdom of the Perl Monks concerning the following question:
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
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: changing copy of a hash changes original
by poj (Abbot) on Nov 13, 2014 at 18:11 UTC | |
|
Re: changing copy of a hash changes original
by CountZero (Bishop) on Nov 13, 2014 at 18:19 UTC | |
|
Re: changing copy of a hash changes original
by 2teez (Vicar) on Nov 13, 2014 at 18:25 UTC | |
by edo (Initiate) on Nov 13, 2014 at 18:44 UTC | |
|
Re: changing copy of a hash changes original
by Anonymous Monk on Nov 14, 2014 at 09:59 UTC | |
|
Re: changing copy of a hash changes original
by locked_user sundialsvc4 (Abbot) on Nov 14, 2014 at 14:43 UTC |