As an example of what BrowserUk and GrandFather are talking about, print the addresses of the hash references you're passing around:
c:\@Work\Perl\monks>perl -wMstrict -MData::Dumper -le
"my $hash = {};
print 'Ma: ', $hash;
;;
do_something($hash);
;;
print 'Mb: ', $hash;
print Dumper($hash);
;;
sub do_something {
my $hash = shift;
print 'Sa: ', $hash;
;;
$hash = { a => 'alpha', b => 'beta', };
print 'Sb: ', $hash;
print Dumper( $hash );
}
"
Ma: HASH(0x9cd06c)
Sa: HASH(0x9cd06c)
Sb: HASH(0x9cd16c)
$VAR1 = {
'a' => 'alpha',
'b' => 'beta'
};
Mb: HASH(0x9cd06c)
$VAR1 = {};
Note that the address of the
$hash reference variable in the subroutine
changes between point
Sa and point
Sb when you assign another anonymous hash reference to it, but the
$hash reference variable in the "main" part of the code
never changes its address (or its contents).
Replace the
$hash = { a => 'alpha', b => 'beta', };
statement in the subroutine with
$hash->{a} = 'alpha';
$hash->{b} = 'beta';
statements that assign by reference to the referent and see what happens to all the hash reference addresses: they never change.
Give a man a fish: <%-{-{-{-<