openhandle
Shawn M Moore [Sun, 28 Sep 2008 04:00:48 +0000 (04:00 +0000)]
lib/Mouse/TypeRegistry.pm
lib/Mouse/Util.pm

index 48d2610..1aef7a8 100644 (file)
@@ -3,8 +3,7 @@ package Mouse::TypeRegistry;
 use strict;
 use warnings;
 
-use Mouse::Util qw/blessed looks_like_number/;
-use Scalar::Util qw/openhandle/;
+use Mouse::Util qw/blessed looks_like_number openhandle/;
 
 no warnings 'uninitialized';
 sub optimized_constraints {
index 5b34083..51aa3f9 100644 (file)
@@ -69,6 +69,23 @@ our %dependencies = (
             }
             : $t
         },
+        'openhandle' => sub {
+            my $fh = shift;
+            my $rt = reftype($fh) || '';
+
+            return defined(fileno($fh)) ? $fh : undef
+                if $rt eq 'IO';
+
+            if (reftype(\$fh) eq 'GLOB') { # handle  openhandle(*DATA)
+                $fh = \(my $tmp=$fh);
+            }
+            elsif ($rt ne 'GLOB') {
+                return undef;
+            }
+
+            (tied(*$fh) or defined(fileno($fh)))
+                ? $fh : undef;
+        },
     },
     'MRO::Compat' => {
         'get_linear_isa' => {