use strict;
use vars qw( %Config );
use File::DosGlob ?glob?;
use Getopt::Long;
my $iCount = 0;
my @Dirs;
Configure( \%Config );
if( $Config{help} )
{
Syntax();
exit;
}
map
{
# File::DosGlob only supports UNIX slashes (not Win32 backslashes)
$_ =~ s////g;
# File::DosGlob requires all spaces to be escaped with an escaping backslash
$_ =~ s/(s)/$1/g;
push( @Dirs, $_ ) if( «» eq $_ );
} split( «;», $ENV{$Config{variable}} );
foreach my $Mask ( @{$Config{mask_list}} )
{
# Escape all spaces in the mask with a backslash
$Mask =~ s/(s)/$1/g;
foreach my $Dir ( @Dirs )
{
foreach my $File ( glob( «$Dir/$Mask» ) )
{
next unless( -f $File );
# For the sake of Windows users convert UNIX slashes to Win32 backslashes
$File =~ s////gs;
printf( « % 3d) %s
», ++$iCount, Win32::GetLongPathName( $File ) );
}
}
}
sub Configure
{
my( $Config ) = @_;
my $Result;
$Config->{variable} = «PATH»;
Getopt::Long::Configure( «prefix_pattern=(-|/)» );
$Result = GetOptions( $Config,
qw(
variable|v=s
help|?
) );
push( @{$Config->{mask_list}}, @ARGV );
$Config->{help} = 1 if( ! $Result || ! scalar @{$Config->{mask_list}} );
}
sub Syntax
{
my ($Name) = ($0 =~ /([^/]*)$/);
my ($Space) = « « x length( $Name );
print<