http://www.perlmonks.org?node_id=741279


in reply to using File::Find for reading files in order

Another tip: In the find sub, $_ is equivalent to File::Find::name, so you could do:

find sub { push @messages, $_ if (-d $_ && !/^\.+$/); }, $dir

Replies are listed 'Best First'.
Re^2: using File::Find for reading files in order
by merlyn (Sage) on Feb 04, 2009 at 15:14 UTC
    In the find sub, $_ is equivalent to File::Find::name
    Nope. $_ holds the name relative to the current directory at the time of the subroutine call, which in the default case has been chdir'ed to the location of the file. But $File::Find::name is always relative to the original directory.

    So they aren't the same. Definitely different uses. You can use $_ inside the subroutine, but if you want to save the name for later, you want to use $File::Find::name. And in fact, it'd be wrong to use $File::Find::name within the subroutine, because your relative name would have been applied twice. Ouch.

      merlyn, Thanks for clarifying. I was hesitant to say "equivalent"; even to say anything other than "you can shorten your code..." And now I've reread the doc, a Good Thing.

      I've reread the OP too, and I think the claimed output is misleading. Surely it is more like the following? (In which case my suggestion can be stricken, as it would only yield the files.)

      /path/to/File 1 /path/to/File 10 /path/to/File 100 /path/to/File 2 /path/to/File 20 ...

      Whew.