Path::Tiny::Glob - File globbing utility
version 0.2.0
use Path::Tiny::Glob; my $dzil_files = pathglob( '~/work/perl-modules/**/dist.ini' ); while( my $file = $dzil_files->next ) { say "found a Dist::Zilla project at ", $file->parent; }
This module exports a single function by default, pathglob.
pathglob
$list = pathglob( $glob ); $list = pathglob( \@path_segments );
This function takes in a shell-like file glob, and returns a Lazy::List of Path::Tiny objects matching it.
If you prefer to get all the globbed files in one go instead of Lazy::Listed, you can import pathglob with the flag all:
all
use Path::Tiny::Glob pathglob => { all => 1 }; # now behaves like pathglob( '/foo/**' )->all; my @files = pathglob( '/foo/**' );
The function can also take an arrayref of path segments. The segments can be strings, in which case they are obeying the same globbing patterns as the stringy $glob.
$glob
$list = pathglob( [ 'foo', 'bar', '*', 'README.md' ] ); # equivalent to $list = pathglob( 'foo/bar/*/README.md' );
The segments, however, can also be coderefs, which will be passed Path::Tiny objects both as their argument and as $_, and are expected to return true if the path is matching.
$_
true
$big_files = pathglob( [ 'foo/bar/**/', sub { -f $_ and -s $_ > 1E6 } );
The segments can also be regexes, in which case they will be compared to the paths' current basename.
basename
@readmes = pathglob( [ 'foo/bar/**/', /^readme\.(md|mkd|txt)$/i );
Known limitation: backtracking paths using .. doesn't work.
..
*
Matches zero or more characters.
?
Matches zero or one character.
**
Matches zero or more directories.
If ** is the last segment of the path, it'll return all descendent files.
is_globby
my $globby = is_globby( './foo/*/bar' );
Returns true if the argument contains any glob character (so ? or *). Can be useful to determine if the input was an explicit path or a glob.
Not exported by default.
File::Wildcard
Yanick Champoux <yanick@cpan.org>
This software is copyright (c) 2019, 2018 by Yanick Champoux.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Path::Tiny::Glob, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Path::Tiny::Glob
CPAN shell
perl -MCPAN -e shell install Path::Tiny::Glob
For more information on module installation, please visit the detailed CPAN module installation guide.