use feature "state"; use strict; use warnings FATAL => qw(all); use Type::Params qw(compile); use Types::Standard qw(Object); use Types::Common::Numeric qw(PositiveOrZeroInt); sub set_age { state $check = compile(Object, PositiveOrZeroInt); my ($self, $age) = $check->(@_); $self->{age} = $age; return $self; }