我不想指定文件名,只想使用扩展名。
像
if(-e "./dir/*.c"){
}
我想检查 ./dir 目录中是否存在任何 .c 文件。是否可以 ?由于我没有得到正确的结果,如果有人知道在这种情况下使用此 -e 开关的任何替代或正确方法,请帮助我。
我不想指定文件名,只想使用扩展名。
像
if(-e "./dir/*.c"){
}
我想检查 ./dir 目录中是否存在任何 .c 文件。是否可以 ?由于我没有得到正确的结果,如果有人知道在这种情况下使用此 -e 开关的任何替代或正确方法,请帮助我。
这可能会有所帮助:
my @list = <*.c>;
if (scalar @list == 0) {
print "No .c File exist.";
} else {
print "Existing C files are\n", join (", ", @list), "\n";
}
除了使用 glob 扩展文件列表来生成子 shell,<*.c>
您还可以使用opendir
,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";
}
where$path
是一个变量,表示目录的路径。
您可能对该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 { ...}