make auto_deref also handles isa not only ArrayRef and HashRef, but also ArrayRef...
[gitmo/Mouse.git] / lib / Mouse / Meta / Attribute.pm
index 851755d..dfae8b2 100644 (file)
@@ -209,8 +209,7 @@ sub validate_args {
 
     confess "You cannot auto-dereference anything other than a ArrayRef or HashRef on attribute ($name)"
         if $args->{auto_deref}
-        && $args->{isa} ne 'ArrayRef'
-        && $args->{isa} ne 'HashRef';
+        && $args->{isa} !~ /^(?:ArrayRef|HashRef)(?:\[.*\])?$/;
 
     if ($args->{trigger}) {
         if (ref($args->{trigger}) eq 'HASH') {
@@ -225,13 +224,14 @@ sub validate_args {
 }
 
 sub verify_against_type_constraint {
-    return 1 unless $_[0]->{type_constraint};
+    my ($self, $value) = @_;
+    my $tc = $self->type_constraint;
+    return 1 unless $tc;
 
-    local $_ = $_[1];
-    return 1 if $_[0]->{type_constraint}->check($_);
+    local $_ = $value;
+    return 1 if $tc->check($value);
 
-    my $self = shift;
-    $self->verify_type_constraint_error($self->name, $_, $self->{type_constraint});
+    $self->verify_type_constraint_error($self->name, $value, $tc);
 }
 
 sub verify_type_constraint_error {