package Cat; use Mojo::Base 'Mojo::EventEmitter'; # Emit events sub poke { my $self = shift; $self->emit(roar => 3); } package main; # Subscribe to events my $tiger = Cat->new; $tiger->on(roar => sub { my ($tiger, $times) = @_; say 'RAWR!' for 1 .. $times; }); $tiger->poke;
$e->on(error => sub { my ($e, $err) = @_; ... });
This is a special event for errors, it will not be emitted directly by this class, but is fatal if unhandled. Subclasses may choose to emit it, but are not required to do so.
$e->on(error => sub { my ($e, $err) = @_; say "This looks bad: $err"; });
$e = $e->catch(sub {...});
Subscribe to ``error'' event.
# Longer version $e->on(error => sub {...});
$e = $e->emit('foo'); $e = $e->emit('foo', 123);
my $bool = $e->has_subscribers('foo');
Check if event has subscribers.
my $cb = $e->on(foo => sub {...});
Subscribe to event.
$e->on(foo => sub { my ($e, @args) = @_; ... });
my $cb = $e->once(foo => sub {...});
Subscribe to event and unsubscribe again after it has been emitted once.
$e->once(foo => sub { my ($e, @args) = @_; ... });
my $subscribers = $e->subscribers('foo');
All subscribers for event.
# Unsubscribe last subscriber $e->unsubscribe(foo => $e->subscribers('foo')->[-1]); # Change order of subscribers @{$e->subscribers('foo')} = reverse @{$e->subscribers('foo')};
$e = $e->unsubscribe('foo'); $e = $e->unsubscribe(foo => $cb);
MOJO_EVENTEMITTER_DEBUG=1