我在寫一個簡單的程序來檢查目錄中是否存在文件。該文件由一些沒有統一時間的外部程序創建。所以,我需要檢查一個循環中是否存在文件,因爲我需要在文件一出現就處理它。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