Event-Wrappable
view release on metacpan or search on metacpan
lib/Event/Wrappable.pm view on Meta::CPAN
# ABSTRACT: Sugar to let you instrument event listeners at a distance
package Event::Wrappable;
{
$Event::Wrappable::VERSION = '0.1.1';
}
use strict;
use warnings;
use Scalar::Util qw( refaddr weaken );
use Sub::Exporter -setup => {
exports => [qw( event event_method )],
groups => { default => [qw( event event_method )] },
};
use Sub::Clone qw( clone_sub );
our %INSTANCES;
our @EVENT_WRAPPERS;
lib/Event/Wrappable.pm view on Meta::CPAN
}
my $LAST_ID;
sub _new {
my $class = shift;
my( $event, $raw_event ) = @_;
bless $event, $class;
my $storage = $INSTANCES{refaddr $event} = {};
weaken( $storage->{'wrapped'} = $event );
weaken( $storage->{'base'} = $raw_event );
$storage->{'wrappers'} = [ @EVENT_WRAPPERS ];
$storage->{'id'} = ++ $LAST_ID;
return $event;
}
sub event(&) {
my( $raw_event ) = @_;
my $event = clone_sub $raw_event;
if ( @EVENT_WRAPPERS ) {
( run in 0.323 second using v1.01-cache-2.11-cpan-9b1e4054eb1 )