sub abc { my %param = @_; for my $required qw( banana nut ) { die "missing: $required" unless defined $param{$required}; } # etc } #### sub abc { # set up defaults my %param = ( apples => 'green', banana => 'yellow', ); # now override with any passed params %param = @_; for my $required qw( banana nut ) { die "missing: $required" unless defined $param{$required}; } # etc } #### my %passed = @_; (@param{ keys %passed }) = values %passed;