use Data::Dumper; my %DEFAULTS = ( a => 'a default', b => 'b default', c => 'c default', ); my %args = ( a => 'a arg', b => undef, ); %args = ( %DEFAULTS, %args ); print Dumper \%args; __END__ $VAR1 = { 'c' => 'c default', 'a' => 'a arg', 'b' => undef };