Take a look at the module
POE::Component::DirWatch on CPAN, I think this might be what you are looking for. It watches a directory for files, and once a filename matching the filter is found, it will kick off a sub-process and invokes the given user callback.
Sample code pulled straight from the doco:
use POE::Component::DirWatch;
POE::Component::DirWatch->spawn(
Alias => 'dirwatch',
Directory => '/some_dir',
Filter => sub { $_[0] =~ /\.gz$/ && -f $_[1] },
Callback => \&some_sub,
PollInterval => 1,
);