我的要求是知道目录中是否至少有2个.wav
个文件。
目前,我使用grep(/\.wav$/,readdir($dir))
来获取.wav
个文件的数量,然后检查其greater than 1
。
但如果有1000s
个文件,我真的不想计算所有文件。
任何人都有更好的解决方案......
谢谢:)
答案 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
上的这个空格。