sub valid_params { my %valid = ( moo => 1, woof => 1, meow => 1, ); return %valid; } sub _validate_params { my %p = @_; my %valid = valid_params(); for (keys %p){ die "$_ isn't a valid param" if ! exists $valid{$_}; } if (exists $p{moo} && ref $p{moo} ne 'HASH'){ die "param 'moo' must be a hash reference"; } }