1

我不想指定文件名,只想使用扩展名。

if(-e "./dir/*.c"){
}

我想检查 ./dir 目录中是否存在任何 .c 文件。是否可以 ?由于我没有得到正确的结果,如果有人知道在这种情况下使用此 -e 开关的任何替代或正确方法,请帮助我。

4

2 回答 2

5

这可能会有所帮助:

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是一个变量,表示目录的路径。

于 2013-07-30T07:04:35.717 回答
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 { ...}
于 2013-07-30T07:32:46.607 回答