NAME
Path::Find - Easily find files in a directory tree
SYNOPSIS
use Path::Find;
# Recursively find all PNG files
my @list = path_find( $dir, "*.png" );
# Find all the jpegs, ignoring case
@list = path_find( $dir, qr/\.jpe?g$/i );
# Find all .cnf files in .directories
@list = path_find( $dir, qr(/^\./), qr/\.cnf$/ );
DESCRIPTION
Path::Find is the simplest way to recursively list all the files in a directory and its subdirectories.
FUNCTIONS
path_find
@list = find_path( $dir );
@list = find_path( $dir, $fileglob );
@list = find_path( $dir, $dirglob, $fileglob );
Recurses $dir and all subdirectories that match $dirglob, returning a list of all files that match $filegob.
- $dir
 - 
Top directory to search.
 - $fileglob
 - 
Glob or other thing to select which files are returned. Passed to "matchable". Defaults to
*. - $dirglob
 - 
Glob or other thing to select which subdirectories are recursed. Passed to "matchable". Defaults to
*. 
Returns the list of files, with $dir prepended.
The globs ($fileglob and $dirglob maybe a string containing a BSD-style glob:
@list = path_find( "/some-dir", "*.png" );
They may be a regex:
@list = path_find( "/other-dir", qr(\.png$) );
They may be a coderef:
@list = path_find( $TOP, sub { $DIRS{$_[0]} }, sub { 1 } );
They may be an object:
my $dirmatch = My::DirMatch->new;
my $filematch = My::FileMatch->new;
@list = path_find( $TOP, $dirmatch, $filematch );
matchable
Convert a glob or other thing into a coderef useful for matching a file or directory. my $sub = matchable( $glob );
Convert a glob into a coderef useful for matching a file or directory. $glob may be one of the following:
Glob string
my $sub = matchable( "*.txt" );
Uses Text::Glob to convert the string into a regex, then builds a subroutine from that. Not that a leading * does not match a leading ., eg *.txt will not match .foo.txt.
Regexp
my $sub = matchable( qr(^honk.+txt$) );
Builds a subroutine that matches the directory entry to the given regex. Note that you must anchor the regex if this is important.
CODE
my $sub = matchable( sub { 
        my( $entry, $directory, $fullname, $depth ) = @_;
        return 1 if length( $entry ) > 3;
        return;
    } );
Returns the coderef as-is. "find_path" will invoke the subref with the following parameters:
- $entry
 - 
Current directory entry being matched. If the file or directory is called
/some/dir/entrythen$entrywill be just"entry". - $directory
 - 
Full path of the directory that the current entry being matched. If the file or directory is called
/some/dir/entrythen$directory/some/dir. - $fullname
 - 
Full path of the directory entry being matched. If the file or directory is called
/some/dir/entrythen$fullnameis the just that,/some/dir/entry. - $depth
 - 
Number of subdirectories between the current
$directoryand the top directory passed tofind_path. Invocations in the top directory have$depth=0. 
Object
my $object = MyClass->new;
my $sub = matchable( $object );
package MyClass;
sub new { return bless {}, shift }
sub match 
{
    my( $self, $entry, $directory, $fullname ) = @_;
    return 1 if $entry eq 'yes';
    return;
}
Builds a subroutine that calls object method match for each directory entry. The parameters are the same as CODE invocations, but with the object being first parameter, as is customary.
SEE ALSO
AUTHOR
Philip Gwyn, <gwyn -AT- cpan.org>
COPYRIGHT AND LICENSE
Copyright (C) 2023 by Philip Gwyn. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.26.3 or, at your option, any later version of Perl 5 you may have available.