With pluggable regexp engines a Regexp is actually a subclass of Regexp, not Regexp itself.
(Another way to do this would be to use Scalar::Util::reftype and check for REGEXP; however this only works since regexps became a first class type in perl 5.12.) I've not been able to run the tests, lots seem to be failing for me, even before this change. --- lib/Moose/Util/TypeConstraints.pm | 2 +- .../Util/TypeConstraints/OptimizedConstraints.pm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Moose/Util/TypeConstraints.pm b/lib/Moose/Util/TypeConstraints.pm index 1f66409..a7e3e12 100644 --- a/lib/Moose/Util/TypeConstraints.pm +++ b/lib/Moose/Util/TypeConstraints.pm @@ -731,7 +731,7 @@ subtype 'Int' => as 'Num' => where { "$_" =~ /^-?[0-9]+$/ } => subtype 'CodeRef' => as 'Ref' => where { ref($_) eq 'CODE' } => optimize_as \&Moose::Util::TypeConstraints::OptimizedConstraints::CodeRef; -subtype 'RegexpRef' => as 'Ref' => where { ref($_) eq 'Regexp' } => +subtype 'RegexpRef' => as 'Ref' => where { blessed($_) && $_->isa('Regexp') } => optimize_as \&Moose::Util::TypeConstraints::OptimizedConstraints::RegexpRef; subtype 'GlobRef' => as 'Ref' => where { ref($_) eq 'GLOB' } => diff --git a/lib/Moose/Util/TypeConstraints/OptimizedConstraints.pm b/lib/Moose/Util/TypeConstraints/OptimizedConstraints.pm index 5d54359..d1ba155 100644 --- a/lib/Moose/Util/TypeConstraints/OptimizedConstraints.pm +++ b/lib/Moose/Util/TypeConstraints/OptimizedConstraints.pm @@ -36,7 +36,7 @@ sub ScalarRef { ref($_[0]) eq 'SCALAR' || ref($_[0]) eq 'REF' } sub ArrayRef { ref($_[0]) eq 'ARRAY' } sub HashRef { ref($_[0]) eq 'HASH' } sub CodeRef { ref($_[0]) eq 'CODE' } -sub RegexpRef { ref($_[0]) eq 'Regexp' } +sub RegexpRef { blessed($_[0]) && $_[0]->isa('Regexp') } sub GlobRef { ref($_[0]) eq 'GLOB' } sub FileHandle { ref($_[0]) eq 'GLOB' && Scalar::Util::openhandle($_[0]) or blessed($_[0]) && $_[0]->isa("IO::Handle") } -- 1.7.3.3