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 be undefined.

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/