This module tries to create a fully working replacement for perls
select built-in, using AnyEvent watchers to do the job, so other
threads can run in parallel to any select user. As many libraries that
only have a blocking API do not use global variables and often use select
(or IO::Select), this effectively makes most such libraries somewhat
non-blocking w.r.t. other threads.
This implementation works fastest when only very few bits are set in the
To be effective globally, this module must be used before any other
module that uses select, so it should generally be the first module
used in the main program. Note that overriding select globally
might actually cause problems, as some AnyEvent backends use select
themselves, and asking AnyEvent to use Coro::Select, which in turn asks
AnyEvent will not quite work.
You can also invoke it from the commandline as perl -MCoro::Select.
To override select only for a single module (e.g. Net::DBus::Reactor),
use a code fragment like this to load it:
use Coro::Select qw(select);
Some modules (notably POE::Loop::Select) directly call
CORE::select. For these modules, we need to patch the opcode table by
sandwiching it between calls to Coro::Select::patch_pp_sselect and
use Coro::Select ();