use warnings; use strict; use Data::Dumper; namedMunge(p1=>'aValU', foo=>undef); sub namedMunge { my %ParamHash = @_; my %defaults = ( foo=>0, bar=>42, baz=>'pie'); ApplyDefaultParams(\%ParamHash, \%defaults); # Do Munge here! print Dumper \%ParamHash; } sub ApplyDefaultParams { my $ParamHashRef = shift; my $DefaultsHashRef = shift; foreach my $key (keys(%$DefaultsHashRef)) { if (not exists($ParamHashRef->{$key})) { $ParamHashRef->{$key} = $DefaultsHashRef->{$key}; } } return $ParamHashRef; } #### $VAR1 = { 'foo' => undef, 'baz' => 'pie', 'p1' => 'aValU', 'bar' => 42 };