in reply to Default values in functions arguments

What you have should work for what you describe, but it seems more like you are passing in a 'VALUE2' key with an undef value. If that's the case, then this may help:
#!/usr/local/bin/perl -w use strict; my %hsh = (a=>1,c=>3,d=>undef); my %hsh1 = myfunc(%hsh); while (my ($key, $value) = each %hsh1) { print "$key=$value\n"; } sub myfunc { my %hsh = @_; my %dflt_values = (a=>0,b=>0,c=>0,d=>0); $hsh{$_} = $dflt_values{$_} for grep { not defined $hsh{$_} } keys %d +flt_values; %hsh; }