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>

t/base.t  view on Meta::CPAN

        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 )