Aspect
view release on metacpan or search on metacpan
lib/Aspect/Library/Listenable.pm view on Meta::CPAN
sub add_listener ($$$) {
my ($listenable, $event_name, $listener) = @_;
Carp::croak "listenable is not a hash based object: [$listenable]"
unless is_hash($listenable);
my $key = get_listener_key($event_name);
$listenable->{$key} = [] unless exists $listenable->{$key};
my $listeners = get_listeners($listenable, $event_name);
my $lastIndex = (push @$listeners, $listener) - 1;
if ( ref $listener eq 'ARRAY' ) { # type 3 listener
Scalar::Util::weaken( $listeners->[$lastIndex]->[1] );
} elsif ( ref $listener ne 'CODE' ) { # type 2 listener
Scalar::Util::weaken( $listeners->[$lastIndex] );
}
}
sub remove_listener ($$$) {
my ($listenable, $event_name, $listener) = @_;
my $listeners = get_listeners($listenable, $event_name);
Carp::croak "listenable has no listeners for event: [$event_name]"
unless $listeners;
my $oldSize = @$listeners;
foreach my $i (0..@$listeners - 1) {
( run in 0.263 second using v1.01-cache-2.11-cpan-65fba6d93b7 )