```{index} single: Coro::Select ``` # Coro::Select a (slow but coro-aware) replacement for CORE::select ## SYNOPSIS ```perl use Coro::Select; # replace select globally (be careful, see below) use Core::Select 'select'; # only in this module use Coro::Select (); # use Coro::Select::select ``` ## DESCRIPTION This module tries to create a fully working replacement for perl's `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 fd set(s). To be effective globally, this module must be `use`'d before any other module that uses `select`, so it should generally be the first module `use`'d 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: ```perl { package Net::DBus::Reactor; use Coro::Select qw(select); use Net::DBus::Reactor; } ``` Some modules (notably [POE::Loop::Select](https://metacpan.org/pod/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 `Coro::Select::unpatch_pp_sselect`: ```perl BEGIN { use Coro::Select (); Coro::Select::patch_pp_sselect; require evil_poe_module_using_CORE::SELECT; Coro::Select::unpatch_pp_sselect; } ``` ## BUGS For performance reasons, Coro::Select's select function might not properly detect bad file descriptors (but relying on EBADF is inherently non-portable). ## SEE ALSO [Coro::LWP](LWP.md). ## AUTHOR/SUPPORT/CONTACT ```perl Marc A. Lehmann http://software.schmorp.de/pkg/Coro.html ```