sub f( $self isa Foo::Bar, # croak unless $self->isa('Foo::Bar'); $foo isa Foo::Bar?, # croak unless undef or of that class $a!, # croak unless $a is defined $b is Int, # croak if $b not int-like $c is Int?, # croak unless undefined or int-like $d is PositiveInt, # user-defined type $e is Int where $_ >= 1, # multiple constraints $f is \@, # croak unless array ref $aref as ref ? $_ : [ $_ ] # coercions: maybe modify the param ) { ...};