如何使用perl

时间:2015-05-20 06:13:50

标签: perl find file-exists

我的要求是知道目录中是否至少有2个.wav个文件。

目前,我使用grep(/\.wav$/,readdir($dir))来获取.wav个文件的数量,然后检查其greater than 1

但如果有1000s个文件,我真的不想计算所有文件。

任何人都有更好的解决方案......

谢谢:)

2 个答案:

答案 0 :(得分:4)

在标量上下文中,您可以使用while()迭代目录项,并在满足条件时立即中断循环,

my $count = 0;
while (defined(my $f = readdir $dir)) {
    if ($f =~ /\.wav$/ and ++$count >= 2) {
      print "there are at least two wav files\n";
      last;
    }
}

答案 1 :(得分:0)

您可以使用glob展开包含widcards的目录中的文件列表,或者使用bsd_glob包中更好的File::Glob

use File::Glob ':bsd_glob';
my @wavfiles = bsd_glob("$your_directory/*.wav");
my $count_wavs = @wavfiles;

请注意,文件计数在标量上下文中使用数组。

bsd_glob更好,因为它正确处理目录名称中的空格(以及其他内容),而不是glob上的这个空格。