in reply to Hashes and Functions

You have two problems. One has been addressed in other replies, on your way to pass the parameter to the local, lexical variable.

But a second problem is that prototypes change the way you have to call your sub. With a prototype \%, perl wants you to pass in a hash, and it will pass on a reference to it to the sub. So the call should look like:

get_conf(%cur_conf);
With that additional change, your code runs as expected, on my system (perl 5.6.1).

Similar, with a prototype \@, you must pass in an array, not an array reference:

sub mypush (\@@) { my $aref = shift; push @$aref, @_; } @a = (1); mypush @a, 2, 3, 4; print "@a\n";
Resulting in: 1 2 3 4