my %hash= initvalues(); ... %hash= initvalues(); ... sub initvalues { return ('a'=>0, ...); } #### my %hash; inithash(\%hash); .... inithash(\%hash); ... sub inithash { my $h= shift; $_[0]= { 'a'=>0, ... }; #note the curled braces #CORRECTED %$h= ( 'a'=>0, ... ); #alternative to the previous line }