make auto_deref also handles isa not only ArrayRef and HashRef, but also ArrayRef...
sunnavy [Tue, 8 Sep 2009 23:27:27 +0000 (07:27 +0800)]
lib/Mouse/Meta/Attribute.pm
lib/Mouse/Meta/Method/Accessor.pm

index 73e8f9e..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') {
index af49197..38531bc 100644 (file)
@@ -88,7 +88,7 @@ sub generate_accessor_method_inline {
     }
 
     if ($should_deref) {
-        if (ref($constraint) && $constraint->name eq 'ArrayRef') {
+        if (ref($constraint) && $constraint->name =~ '^ArrayRef\b') {
             $accessor .= 'if (wantarray) {
                 return @{ '.$self.'->{'.$key.'} || [] };
             }';