=head1 NAME AnyEvent - the DBI of event loop programming EV, Event, Glib, Tk, Perl, Event::Lib, Irssi, rxvt-unicode, IO::Async, Qt and POE are various supported event loops/environments. =head1 SYNOPSIS use AnyEvent; # if you prefer function calls, look at the L manpage for # an alternative API. # file handle or descriptor readable my $w = AnyEvent->io (fh => $fh, poll => "r", cb => sub { ... }); # one-shot or repeating timers my $w = AnyEvent->timer (after => $seconds, cb => sub { ... }); my $w = AnyEvent->timer (after => $seconds, interval => $seconds, cb => ... print AnyEvent->now; # prints current event loop time print AnyEvent->time; # think Time::HiRes::time or simply CORE::time. # POSIX signal my $w = AnyEvent->signal (signal => "TERM", cb => sub { ... }); # child process exit my $w = AnyEvent->child (pid => $pid, cb => sub { my ($pid, $status) = @_; ... }); # called when event loop idle (if applicable) my $w = AnyEvent->idle (cb => sub { ... }); my $w = AnyEvent->condvar; # stores whether a condition was flagged $w->send; # wake up current and all future recv's $w->recv; # enters "main loop" till $condvar gets ->send # use a condvar in callback mode: $w->cb (sub { $_[0]->recv }); =head1 INTRODUCTION/TUTORIAL This manpage is mainly a reference manual. If you are interested in a tutorial or some gentle introduction, have a look at the L manpage. =head1 SUPPORT There is a mailinglist for discussing all things AnyEvent, and an IRC channel, too. See the AnyEvent project page at the B, at L, for more info. =head1 WHY YOU SHOULD USE THIS MODULE (OR NOT) Glib, POE, IO::Async, Event... CPAN offers event models by the dozen nowadays. So what is different about AnyEvent? Executive Summary: AnyEvent is I, AnyEvent is I and AnyEvent is I. First and foremost, I itself, it only interfaces to whatever event model the main program happens to use, in a pragmatic way. For event models and certain classes of immortals alike, the statement "there can only be one" is a bitter reality: In general, only one event loop can be active at the same time in a process. AnyEvent cannot change this, but it can hide the differences between those event loops. The goal of AnyEvent is to offer module authors the ability to do event programming (waiting for I/O or timer events) without subscribing to a religion, a way of living, and most importantly: without forcing your module users into the same thing by forcing them to use the same event model you use. For modules like POE or IO::Async (which is a total misnomer as it is actually doing all I/O I...), using them in your module is like joining a cult: After you joined, you are dependent on them and you cannot use anything else, as they are simply incompatible to everything that isn't them. What's worse, all the potential users of your module are I forced to use the same event loop you use. AnyEvent is different: AnyEvent + POE works fine. AnyEvent + Glib works fine. AnyEvent + Tk works fine etc. etc. but none of these work together with the rest: POE + IO::Async? No go. Tk + Event? No go. Again: if your module uses one of those, every user of your module has to use it, too. But if your module uses AnyEvent, it works transparently with all event models it supports (including stuff like IO::Async, as long as those use one of the supported event loops. It is trivial to add new event loops to AnyEvent, too, so it is future-proof). In addition to being free of having to use I, AnyEvent also is free of bloat and policy: with POE or similar modules, you get an enormous amount of code and strict rules you have to follow. AnyEvent, on the other hand, is lean and up to the point, by only offering the functionality that is necessary, in as thin as a wrapper as technically possible. Of course, AnyEvent comes with a big (and fully optional!) toolbox of useful functionality, such as an asynchronous DNS resolver, 100% non-blocking connects (even with TLS/SSL, IPv6 and on broken platforms such as Windows) and lots of real-world knowledge and workarounds for platform bugs and differences. Now, if you I lots of policy (this can arguably be somewhat useful) and you want to force your users to use the one and only event model, you should I use this module. =head1 DESCRIPTION L provides an identical interface to multiple event loops. This allows module authors to utilise an event loop without forcing module users to use the same event loop (as only a single event loop can coexist peacefully at any one time). The interface itself is vaguely similar, but not identical to the L module. During the first call of any watcher-creation method, the module tries to detect the currently loaded event loop by probing whether one of the following modules is already loaded: L, L, L, L, L, L, L, L. The first one found is used. If none are found, the module tries to load these modules (excluding Tk, Event::Lib, Qt and POE as the pure perl adaptor should always succeed) in the order given. The first one that can be successfully loaded will be used. If, after this, still none could be found, AnyEvent will fall back to a pure-perl event loop, which is not very efficient, but should work everywhere. Because AnyEvent first checks for modules that are already loaded, loading an event model explicitly before first using AnyEvent will likely make that model the default. For example: use Tk; use AnyEvent; # .. AnyEvent will likely default to Tk The I means that, if any module loads another event model and starts using it, all bets are off. Maybe you should tell their authors to use AnyEvent so their modules work together with others seamlessly... The pure-perl implementation of AnyEvent is called C. Like other event modules you can load it explicitly and enjoy the high availability of that event loop :) =head1 WATCHERS AnyEvent has the central concept of a I, which is an object that stores relevant data for each kind of event you are waiting for, such as the callback to call, the file handle to watch, etc. These watchers are normal Perl objects with normal Perl lifetime. After creating a watcher it will immediately "watch" for events and invoke the callback when the event occurs (of course, only when the event model is in control). Note that B potentially in use by the event loop (such as C<$_> or C<$[>) and that B<< callbacks must not C >>. The former is good programming practise in Perl and the latter stems from the fact that exception handling differs widely between event loops. To disable the watcher you have to destroy it (e.g. by setting the variable you store it in to C or otherwise deleting all references to it). All watchers are created by calling a method on the C class. Many watchers either are used with "recursion" (repeating timers for example), or need to refer to their watcher object in other ways. An any way to achieve that is this pattern: my $w; $w = AnyEvent->type (arg => value ..., cb => sub { # you can use $w here, for example to undef it undef $w; }); Note that C combination. This is necessary because in Perl, my variables are only visible after the statement in which they are declared. =head2 I/O WATCHERS $w = AnyEvent->io ( fh => , poll => <"r" or "w">, cb => , ); You can create an I/O watcher by calling the C<< AnyEvent->io >> method with the following mandatory key-value pairs as arguments: C is the Perl I (or a naked file descriptor) to watch for events (AnyEvent might or might not keep a reference to this file handle). Note that only file handles pointing to things for which non-blocking operation makes sense are allowed. This includes sockets, most character devices, pipes, fifos and so on, but not for example files or block devices. C must be a string that is either C or C, which creates a watcher waiting for "r"eadable or "w"ritable events, respectively. C is the callback to invoke each time the file handle becomes ready. Although the callback might get passed parameters, their value and presence is undefined and you cannot rely on them. Portable AnyEvent callbacks cannot use arguments passed to I/O watcher callbacks. The I/O watcher might use the underlying file descriptor or a copy of it. You must not close a file handle as long as any watcher is active on the underlying file descriptor. Some event loops issue spurious readyness notifications, so you should always use non-blocking calls when reading/writing from/to your file handles. Example: wait for readability of STDIN, then read a line and disable the watcher. my $w; $w = AnyEvent->io (fh => \*STDIN, poll => 'r', cb => sub { chomp (my $input = ); warn "read: $input\n"; undef $w; }); =head2 TIME WATCHERS $w = AnyEvent->timer (after => , cb => ); $w = AnyEvent->timer ( after => , interval => , cb => , ); You can create a time watcher by calling the C<< AnyEvent->timer >> method with the following mandatory arguments: C specifies after how many seconds (fractional values are supported) the callback should be invoked. C is the callback to invoke in that case. Although the callback might get passed parameters, their value and presence is undefined and you cannot rely on them. Portable AnyEvent callbacks cannot use arguments passed to time watcher callbacks. The callback will normally be invoked once only. If you specify another parameter, C, as a strictly positive number (> 0), then the callback will be invoked regularly at that interval (in fractional seconds) after the first invocation. If C is specified with a false value, then it is treated as if it were missing. The callback will be rescheduled before invoking the callback, but no attempt is done to avoid timer drift in most backends, so the interval is only approximate. Example: fire an event after 7.7 seconds. my $w = AnyEvent->timer (after => 7.7, cb => sub { warn "timeout\n"; }); # to cancel the timer: undef $w; Example 2: fire an event after 0.5 seconds, then roughly every second. my $w = AnyEvent->timer (after => 0.5, interval => 1, cb => sub { warn "timeout\n"; }; =head3 TIMING ISSUES There are two ways to handle timers: based on real time (relative, "fire in 10 seconds") and based on wallclock time (absolute, "fire at 12 o'clock"). While most event loops expect timers to specified in a relative way, they use absolute time internally. This makes a difference when your clock "jumps", for example, when ntp decides to set your clock backwards from the wrong date of 2014-01-01 to 2008-01-01, a watcher that is supposed to fire "after" a second might actually take six years to finally fire. AnyEvent cannot compensate for this. The only event loop that is conscious about these issues is L, which offers both relative (ev_timer, based on true relative time) and absolute (ev_periodic, based on wallclock time) timers. AnyEvent always prefers relative timers, if available, matching the AnyEvent API. AnyEvent has two additional methods that return the "current time": =over 4 =item AnyEvent->time This returns the "current wallclock time" as a fractional number of seconds since the Epoch (the same thing as C