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) ..