Re: [perl #41555] Bug in File::Find on Windows when target
[p5sagit/p5-mst-13.2.git] / lib / File / stat.pm
index aff5d03..132cbee 100644 (file)
@@ -1,8 +1,9 @@
 package File::stat;
+use 5.006;
+
 use strict;
 use warnings;
 
-use 5.6.0;
 our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
 
 our $VERSION = '1.00';
@@ -47,9 +48,15 @@ sub stat ($) {
     my $arg = shift;
     my $st = populate(CORE::stat $arg);
     return $st if $st;
-    no strict 'refs';
-    require Symbol;
-    return populate(CORE::stat \*{Symbol::qualify($arg)});
+       my $fh;
+    {
+               local $!;
+               no strict 'refs';
+               require Symbol;
+               $fh = \*{ Symbol::qualify( $arg, caller() )};
+               return unless defined fileno $fh;
+       }
+    return populate(CORE::stat $fh);
 }
 
 1;
@@ -108,6 +115,20 @@ function functions with their full qualified names.
 On the other hand, the built-ins are still available
 via the C<CORE::> pseudo-package.
 
+=head1 BUGS
+
+As of Perl 5.8.0 after using this module you cannot use the implicit
+C<$_> or the special filehandle C<_> with stat() or lstat(), trying
+to do so leads into strange errors.  The workaround is for C<$_> to
+be explicit
+
+    my $stat_obj = stat $_;
+
+and for C<_> to explicitly populate the object using the unexported
+and undocumented populate() function with CORE::stat():
+
+    my $stat_obj = File::stat::populate(CORE::stat(_));
+
 =head1 NOTE
 
 While this class is currently implemented using the Class::Struct