A better fix for [perl #35847] File::Find not performing as documented,
Rafael Garcia-Suarez [Mon, 14 Nov 2005 15:40:08 +0000 (15:40 +0000)]
suggested by Darren Dunham. Includes a fix to the code example that
uses File::Find in perlfaq3.

p4raw-id: //depot/perl@26128

lib/File/Find.pm
pod/perlfaq3.pod

index e41c241..497051e 100644 (file)
@@ -120,11 +120,10 @@ If either I<follow> or I<follow_fast> is in effect:
 
 =item *
 
-Previous versions of File::Find were guaranteed to call an I<lstat>
-before the user's C<wanted()> function was called, but this is no
-longer the case.  Since this depends on C<$File::Find::dont_use_nlink>, $^O,
-and other factors, fast file checks involving C<_> are not recommended
-unless C<wanted()> calls I<lstat> first.
+It is guaranteed that an I<lstat> has been called before the user's
+C<wanted()> function is called. This enables fast file checks involving S<_>.
+Note that this guarantee no longer holds if I<follow> or I<follow_fast>
+are not set.
 
 =item *
 
index 67a8d43..02e15b7 100644 (file)
@@ -85,10 +85,12 @@ with File::Find which is part of the standard library.
     use File::Find;
     my @files;
 
-    find sub { push @files, $File::Find::name if -f _ && /\.pm$/ },
-         @INC;
+    find(
+      sub { push @files, $File::Find::name if -f $File::Find::name && /\.pm$/ },
+      @INC
+    );
 
-       print join "\n", @files;
+    print "$_\n" for @files;
 
 If you simply need to quickly check to see if a module is
 available, you can check for its documentation.  If you can