我在写一个简单的程序来检查目录中是否存在文件。该文件由一些没有统一时间的外部程序创建。所以,我需要检查一个循环中是否存在文件,因为我需要在文件一出现就处理它。Perl:读取目录,直到有文件
即使文件已经创建,该程序也会连续运行。
#!/usr/bin/perl
use strict;
use warnings;
my $dir = "/my/path";
opendir(my $dh, $dir) || die "can't opendir $dir: $!";
my @files = grep { /^[^\.]/ && -f "$dir/$_" } readdir($dh);
until (@files) {
print "No files Found: Sleeping for a sec\n";
sleep(1);
@files = grep { /^[^\.]/ && -f "$dir/$_" } readdir($dh);
}
print @files;
下面的程序按预期工作。
#!/usr/bin/perl
use strict;
use warnings;
my $dir = "/my/path";
opendir(my $dh, $dir) || die "can't opendir $dir: $!";
my @files = grep { /^[^\.]/ && -f "$dir/$_" } readdir($dh);
closedir $dh;
until (@files) {
opendir(my $dh, $dir) || die "can't opendir $dir: $!";
print "No files Found: Sleeping for a sec\n";
sleep(1);
@files = grep { /^[^\.]/ && -f "$dir/$_" } readdir($dh);
closedir $dh;
}
print @files;
我想知道这两种方法的区别。为什么前一个没有工作,即使我每次都在循环读取目录。为什么我需要在循环中每次打开目录才能使其工作?
它确实如此。 – AbhiNickz
看看[Filesys :: Notify :: Simple](https://metacpan.org/pod/Filesys::Notify::Simple)。 – nwellnhof