http://www.perlmonks.org?node_id=283857


in reply to how to permanently monitor a directory

Well, like all things Perl, TISMTOWTDI.

If you know what the files will be (example, they are uploaded by a script so the filename will always be the same) you could do something like:

while (1) { if (-e "/my/dir/filename.dat") { do_something_now(); } }
If not, you could use your own code. I'm not sure I'd have it 'sleep' though. Run it from cron every so often would make more sense to me. Also, you can drop a couple of lines by changing
my $items_in_dir = @Dircontent; if ($items_in_dir > 2) ..
to
if (scalar(@Dircontent) > 2) ..

Replies are listed 'Best First'.
Re: Re: how to permanently monitor a directory
by LanceDeeply (Chaplain) on Aug 14, 2003 at 13:50 UTC
    This:
    my $items_in_dir = @Dircontent; if ($items_in_dir > 2) ..
    won't work if some smart alec decides to create a subdir in your drop area. try using -f

    TISMTOWTDI:

    use strict; use warnings; sub scandir { my $dir = shift; my $fileProcessor = shift; opendir (DIR, $dir) or die "Cannot open $dir: $!\n"; for (readdir DIR) { if ( -f ) { &$fileProcessor($_); } } close DIR; } sub do_something { my $filename = shift; print "got file: $filename\n"; } sub do_something_else { my $filename = shift; print "got another file: $filename\n"; } scandir('.',\&do_something); scandir('.',\&do_something_else);