Params::Validate
use Params::Validate qw( validate SCALAR UNDEF );
my %p =
validate
( @_,
{ foo => { type => SCALAR | UNDEF },
bar => { isa => 'Bar' },
baz => { can => 'print' },
color =>
{ regex => qr/^(?:red|blue)$/ },
);
continued...