sub coerce { ((shift)->coercion || Moose->throw_error("Cannot coerce without a type coercion"))->coerce(@_) }
-sub check { $_[0]->_compiled_type_constraint->($_[1]) ? 1 : undef }
+
+sub check {
+ my ($self, @args) = @_;
+ my $constraint_subref = $self->_compiled_type_constraint;
+ return $constraint_subref->(@args) ? 1 : undef;
+}
+
sub validate {
my ($self, $value) = @_;
if ($self->_compiled_type_constraint->($value)) {
} else {
return Class::MOP::subname($self->name, sub {
return undef unless $optimized_parent->($_[0]);
- local $_ = $_[0];
- $check->($_[0]);
+ my (@args) = @_;
+ local $_ = $args[0];
+ $check->(@args);
});
}
} else {
my @checks = @parents;
push @checks, $check if $check != $null_constraint;
return Class::MOP::subname($self->name => sub {
- local $_ = $_[0];
+ my (@args) = @_;
+ local $_ = $args[0];
foreach my $check (@checks) {
- return undef unless $check->($_[0]);
+ return undef unless $check->(@args);
}
return 1;
});
return $check if $check == $null_constraint; # Item, Any
return Class::MOP::subname($self->name => sub {
- local $_ = $_[0];
- $check->($_[0]);
+ my (@args) = @_;
+ local $_ = $args[0];
+ $check->(@args);
});
}