use My::Params::Validate; my $validator = My::Params::Validate->new( Foo=>[ qw[foo|bar|qux] ], Bar=>[ 100 .. 1000 ], Qux=>[ 2e9, 3e8 ], ); sub myfunction{ my %opts = $validator %defs, @_; ... }