use Params::Validate 'validate_pos'; use constant FOOBAR_TYPE => { can => [ qw[ print flush frobnicate ] ] }; sub bar { my $foobar = validate_pos( @_, FOOBAR_TYPE ); } #### use Params::Validate 'validate_pos'; use constant FOOBAR_TYPE => { callbacks => { interface => sub { Interface::has( FooBar => $_[0] ) } } }; sub bar { my $foobar = validate_pos( @_, FOOBAR_TYPE ); } package FooBar; use Interface 'FOOBAR'; ...