ディレクトリにファイルの存在を確認する簡単なプログラムを書いています。このファイルは、一定の時間を持たない外部プログラムによって作成されます。だから、私はそれが生まれたら直ちに処理する必要があるので、ループ内のファイルの存在を確認する必要があります。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;
これらの2つのアプローチの違いを知りたいと思います。なぜ私はループ内で毎回ディレクトリを読んでいても、以前のものは動作しませんでした。なぜ私はそれを動作させるためにループ内で毎回ディレクトリを開く必要がありますか?
に短縮することができますします。 – AbhiNickz
[Filesys :: Notify :: Simple](https://metacpan.org/pod/Filesys::Notify:Simple)を見てください。 – nwellnhof