looks_like_number
Shawn M Moore [Sun, 28 Sep 2008 03:46:22 +0000 (03:46 +0000)]
lib/Mouse/TypeRegistry.pm
lib/Mouse/Util.pm

index a8992c2..48d2610 100644 (file)
@@ -3,8 +3,8 @@ package Mouse::TypeRegistry;
 use strict;
 use warnings;
 
-use Mouse::Util 'blessed';
-use Scalar::Util qw/looks_like_number openhandle/;
+use Mouse::Util qw/blessed looks_like_number/;
+use Scalar::Util qw/openhandle/;
 
 no warnings 'uninitialized';
 sub optimized_constraints {
index c8b3c67..9fb77ae 100644 (file)
@@ -30,6 +30,17 @@ our %dependencies = (
                     : undef;
             },
         },
+        'looks_like_number' => sub {
+            local $_ = shift;
+
+            # checks from perlfaq4
+            return 0 if !defined($_) or ref($_);
+            return 1 if (/^[+-]?\d+$/); # is a +/- integer
+            return 1 if (/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/); # a C float
+            return 1 if ($] >= 5.008 and /^(Inf(inity)?|NaN)$/i) or ($] >= 5.006001 and /^Inf$/i);
+
+            0;
+        },
     },
     'MRO::Compat' => {
         'get_linear_isa' => {