我不想指定文件名,只想使用扩展名。
喜欢
if(-e "./dir/*.c"){
}
我想检查./dir目录中是否存在任何.c文件。 可能吗 ? 由于我没有得到正确的结果,如果有人知道在这种情况下使用这个-e开关的任何替代或正确方法,请帮助我。
答案 0 :(得分:5)
这可能有所帮助:
my @list = <*.c>;
if (scalar @list == 0) {
print "No .c File exist.";
} else {
print "Existing C files are\n", join (", ", @list), "\n";
}
您可以使用<*.c>
,opendir
函数,而不是通过生成子shell,而不是使用<{1}}扩展文件列表:
readdir
其中opendir DIR, $path;
my @list = readdir DIR;
closedir (DIR);
my $flag = 0;
foreach $file (@list) {
if ($file =~ m/^.*\.c$/i) {
print "$file\n";
$flag = 1;
}
}
if ($flag == 0) {
print "No .c file exists\n";
}
是一个表示目录路径的变量。
答案 1 :(得分:1)
您可能对File::Find
模块感兴趣,这是Perl版本5中的核心模块。它是递归的,可能是也可能不是您想要的。
use strict;
use warnings;
use File::Find;
use Data::Dumper; # for output only
my @found;
find(sub { /\.c$/i && push @found, $File::Find::name; }, 'dir');
print Dumper \@found;
$File::Find::name
包含文件的完整路径。正则表达式与包含基本文件名的$_
匹配。请注意,find()
子例程的第一个参数是匿名子,即代码块。
如果要检查空输出,则在标量上下文中使用数组将返回其大小。零(假)大小表示未找到匹配项。
if (@found) {
print "Found files: @found\n";
} else { ...}