Dear Monks,
We are making some changes to our system and one of the objectives was to use
POE::Component::DirWatch.
I tried the following code from the internet, modified to my needs.
Main objective of the script is to watch a directory and print the filenames that gets added to that directory
The script is able to watch a specified directory and when a file gets added to the directory the script responds.
One issue I'm facing is that it is not able to print the file names which came into the directory. Instead it prints "" and empty session id.
use warnings;
use strict;
use POE;
use POE::Component::DirWatch;
POE::Session->create(
inline_states => {
_start => \&init_watcher,
watch_dir => \&watch_dir,
},
);
sub init_watcher {
my ($kernel, $heap, $session, $sender) = @_[KERNEL, HEAP, SESSION,
+SENDER];
warn "Queue 1 starting (session id " . $session->ID . ")";
# watch a directory for this queue
$kernel->yield('watch_dir', '/tmp/queue1'); }
sub watch_dir {
my ($kernel, $heap, $session, $queue) = @_[KERNEL, HEAP, SESSION,
+ ARG0];
# start watching the directory
POE::Component::DirWatch->new(
alias => 'dirwatch',
directory => $queue,
file_callback => \&found_file,
interval => 1,
);
}
sub found_file {
my ($kernel, $heap, $session, $sender, $file) = @_[KERNEL, HEAP, S
+ESSION, SENDER, ARG1];
# warn "Found '$file' for " . $session->ID . " (from " . $sender-ID
+ . ")\n";
warn "Found '$file' for $session->ID\n";
}
$poe_kernel->run();
exit(0);
Below is the output of the script without the filename(s) and the session ID.
-bash-3.00$ ./dirwatch_test1.pl
Queue 1 starting (session id 2) at ./dirwatch_test1.pl line 19.
Found '' for ->ID
Found '' for ->ID
Please let me know whats the error. Also let me know if there is a shorter way of doing this.
I'm using verion 0.20000 of
POE::Component::DirWatch
Thanks for your help.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.