#!/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 %dflt_values; %hsh; }