NAME
AnyEvent::Util - various utility functions.
SYNOPSIS
use AnyEvent::Util;
DESCRIPTION
This module implements various utility functions, mostly replacing well-known functions by event-ised counterparts.
All functions documented without AnyEvent::Util::
prefix are exported by default.
- ($r, $w) = portable_pipe
-
Calling
pipe
in Perl is portable - except it doesn't really work on sucky windows platforms (at least not with most perls - cygwin's perl notably works fine).On that platform, you actually get two file handles you cannot use select on.
This function gives you a pipe that actually works even on the broken Windows platform (by creating a pair of TCP sockets, so do not expect any speed from that).
Returns the empty list on any errors.
- fork_call $coderef, @args, $cb->(@res)
-
Executes the given code reference asynchronously, by forking. Everything the
$coderef
returns will transferred to the calling process (by serialising and deserialising via Storable).If there are any errors, then the
$cb
will be called without any arguments. In that case, either$@
contains the exception, or$!
contains an error number. In all other cases,$@
will beundef
ined.The
$coderef
must not ever call an event-polling function or use event-based programming.Note that forking can be expensive in large programs (RSS 200MB+). On windows, it is abysmally slow, do not expect more than 5..20 forks/s on that sucky platform (note this uses perl's pseudo-threads, so avoid those like the plague).
- $AnyEvent::Util::MAX_FORKS [default: 10]
-
The maximum number of child processes that
fork_call
will fork in parallel. Any additional requests will be queued until a slot becomes free again.The environment variable
PERL_ANYEVENT_MAX_FORKS
is used to initialise this value. - fh_nonblocking $fh, $nonblocking
-
Sets the blocking state of the given filehandle (true == nonblocking, false == blocking). Uses fcntl on anything sensible and ioctl FIONBIO on broken (i.e. windows) platforms.
- $guard = guard { CODE }
-
This function creates a special object that, when called, will execute the code block.
This is often handy in continuation-passing style code to clean up some resource regardless of where you break out of a process.
You can call one method on the returned object:
- $guard->cancel
-
This simply causes the code block not to be invoked: it "cancels" the guard.
AUTHOR
Marc Lehmann <schmorp@schmorp.de>
http://home.schmorp.de/