As an example of what BrowserUk and GrandFather are talking about, print the addresses of the hash references you're passing around:
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).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 = {};
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: <%-{-{-{-<
In reply to Re: hash question
by AnomalousMonk
in thread hash question
by duyet
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |