Consider this program:
#!/usr/bin/perl -w
use strict;
# use Event;
use POE;
pipe(local *RD, local *WR) || die "Pipe: $!";
POE::Session->create(inline_states => {
_start => sub {
$poe_kernel->alias_set("foo");
},
add => sub {
$poe_kernel->select_read(\*RD, "readable");
},
readable => sub {
$poe_kernel->select_read(\*RD);
},
});
$poe_kernel->call("foo", "add");
close WR;
$poe_kernel->run();
I would expect that to open a pipe, set an alias, then add a readability
watch on RD. Next the close will cause EOF for RD, so the readability will
trigger, and the watcher is removed. Now the kernel has no more work,
so I expect everything to clean up and exit (it should detect that the
alias can never get triggered anymore).
And this is what happens for all event cores I tested (Select, Poll and Tk)
except when I use the Event module. Uncomment the "use Event" line and the
program will hang in run().
(POE version is 0.28_04, Event version is 1.00).
--
The early bird may get the worm, but the second mouse gets the cheese.