FastGlob
view release on metacpan or search on metacpan
lib/FastGlob.pm view on Meta::CPAN
# skip empty patterns â CORE::glob returns nothing for them
@_ = grep { defined $_ && $_ ne '' } @_;
for (@_) {
# check for and do tilde expansion
if ( /^\~([^\Q${dirsep}\E]*)/ ) {
my $usr = $1;
my $usrdir;
if ( $usr eq "" ) {
# ~ alone: try getpwuid, fall back to $HOME / $USERPROFILE
$usrdir = eval { (getpwuid($<))[7] };
if ( !defined $usrdir ) {
$usrdir = defined $ENV{HOME} ? $ENV{HOME} : $ENV{USERPROFILE};
}
} else {
# ~user: try getpwnam (not available on Windows)
$usrdir = eval { (getpwnam($usr))[7] };
}
if ( defined $usrdir && $usrdir ne "" ) {
s/^\~\Q$usr\E/$usrdir/;
}
lib/FastGlob.pm view on Meta::CPAN
$FastGlob::hidedotfiles = 1; # hide filenames starting with .
For classic MacOS you would set:
$FastGlob::dirsep = ':'; # directory path separator
$FastGlob::rootpat = '\A\Z'; # root directory prefix pattern
$FastGlob::curdir = '.'; # name of current directory in dir
$FastGlob::parentdir = '..'; # name of parent directory in dir
$FastGlob::hidedotfiles = 0; # hide filenames starting with .
Tilde expansion (C<~> and C<~user>) uses C<getpwuid>/C<getpwnam> on UNIX.
On Windows, C<~> falls back to C<$HOME> or C<$USERPROFILE>.
=head1 INSTALLATION
Copy this module to the Perl 5 Library directory.
=head1 AUTHOR
Marc Mengel <mengel@fnal.gov>
note "mine: [${udiffm}u\t${sdiffm}s]";
note "glob: [${udiffg}u\t${sdiffg}s]\n";
}
}
globtest();
pass 'done';
# Tilde expansion tests â the module supports ~ and ~user patterns.
# On Unix, getpwuid/getpwnam provide home dirs; on Windows, $HOME/$USERPROFILE.
SKIP: {
my $homedir;
if ( $^O eq 'MSWin32' ) {
$homedir = defined($ENV{HOME}) ? $ENV{HOME} : $ENV{USERPROFILE};
} else {
my $has_getpwent = eval { getpwent(); 1 };
endpwent() if $has_getpwent;
skip 'getpwent not available on this platform', 4 unless $has_getpwent;
my @home = getpwuid($<);
$homedir = $home[7];
}
skip 'cannot determine home directory', 4 unless $homedir && -d $homedir;
my @tilde_results = FastGlob::glob('~');
is( scalar @tilde_results, 1, '~ expands to exactly one entry' );
is( $tilde_results[0], $homedir, '~ expands to current user home directory' );
# ~root expands to root's home directory (named user, Unix only)
t/tilde-fallthrough.t view on Meta::CPAN
# --- Known user (current user) still expands ---
SKIP: {
my $homedir;
if ( $^O eq 'MSWin32' ) {
$homedir = defined($ENV{HOME}) ? $ENV{HOME} : $ENV{USERPROFILE};
} else {
my $has_getpwent = eval { getpwent(); 1 };
endpwent() if $has_getpwent;
skip 'getpwuid not available on this platform', 1 unless $has_getpwent;
my @home = getpwuid($<);
$homedir = $home[7];
}
skip 'cannot determine home directory', 1 unless $homedir && -d $homedir;
my @got = FastGlob::glob('~');
is( $got[0], $homedir, '~ still expands to home directory' );
}
done_testing;
( run in 1.378 second using v1.01-cache-2.11-cpan-39bf76dae61 )