Как вы можете увидеть, находится ли файл в одном из каталогов, указанных в $ENV{PATH}
, не глядя на $ENV{PATH}
?... Это риторический вопрос.
Вот короткий сценарий, который я написал некоторое время назад.Вы должны быть в состоянии адаптировать его для ваших нужд:
#!/usr/bin/perl
use strict; use warnings;
use File::Basename;
use File::Spec::Functions qw( catfile path );
my $myname = fileparse $0;
die "Usage: $myname program_name\n" unless @ARGV;
my @path = path;
my @pathext = ( q{} );
if ( $^O eq 'MSWin32' ) {
push @pathext, map { lc } split /;/, $ENV{PATHEXT};
}
PROGRAM: for my $progname ( @ARGV ) {
unless ( $progname eq fileparse $progname ) {
warn "Not processed: $progname\n\tArgument is not a plain file name\n";
next PROGRAM;
}
my @results;
for my $dir ( @path ) {
for my $ext ( @pathext ) {
my $f = catfile $dir, "$progname$ext";
push @results, $f if -x $f;
}
}
print "$progname:\n";
print "\t$_\n" for @results;
}