X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FTypeRegistry.pm;h=4f3125cc92462261975ea9c898da2ab7cc6446c4;hb=0f636a977c023ab857c525f6e4eed7e4881d0e26;hp=3a38eb35462b759c3cf08213ea6b60fe8d08d23f;hpb=dfaf3196b3695d135ee2ea6a9dbd653de9a4b68d;p=gitmo%2FMouse.git diff --git a/lib/Mouse/TypeRegistry.pm b/lib/Mouse/TypeRegistry.pm index 3a38eb3..4f3125c 100644 --- a/lib/Mouse/TypeRegistry.pm +++ b/lib/Mouse/TypeRegistry.pm @@ -2,7 +2,9 @@ package Mouse::TypeRegistry; use strict; use warnings; +use Scalar::Util qw/looks_like_number blessed openhandle/; +no warnings 'uninitialized'; sub optimized_constraints { return { Any => sub { 1 }, @@ -12,20 +14,29 @@ sub optimized_constraints { }, Undef => sub { !defined($_) }, Defined => sub { defined($_) }, - Value => sub { 1 }, - Num => sub { 1 }, - Int => sub { 1 }, - Str => sub { 1 }, + Value => sub { defined($_) && !ref($_) }, + Num => sub { !ref($_) && looks_like_number($_) }, + Int => sub { defined($_) && !ref($_) && /^-?[0-9]+$/ }, + Str => sub { defined($_) && !ref($_) }, ClassName => sub { 1 }, - Ref => sub { 1 }, - ScalarRef => sub { 1 }, - ArrayRef => sub { 1 }, - HashRef => sub { 1 }, - CodeRef => sub { 1 }, - RegexpRef => sub { 1 }, - GlobRef => sub { 1 }, - FileHandle => sub { 1 }, - Object => sub { 1 }, + Ref => sub { ref($_) }, + + ScalarRef => sub { ref($_) eq 'SCALAR' }, + ArrayRef => sub { ref($_) eq 'ARRAY' }, + HashRef => sub { ref($_) eq 'HASH' }, + CodeRef => sub { ref($_) eq 'CODE' }, + RegexpRef => sub { ref($_) eq 'Regexp' }, + GlobRef => sub { ref($_) eq 'GLOB' }, + + FileHandle => sub { + ref($_) eq 'GLOB' + && openhandle($_) + or + blessed($_) + && $_->isa("IO::Handle") + }, + + Object => sub { blessed($_) && blessed($_) ne 'Regexp' }, }; }