sub foo { my $obj = shift; my $p = { @_ }; my $value = exists $p->{value} ? $p->{value} : die "must give 'value', even if undef or ''"; if( exists $p->{optional_but_possibly_blank_key} ){ ... }