Posts Tagged 'Perl Event Listeners'

Fun with Perl Event Listeners

I got tired of passing around object references in my feed engine project at work so I decided to implement my own event handler/listener system (see snippet below). I should now be able to go back and simplify a lot of ugly code :P

[UPDATED]: The mechanics of my previous incarnation were still a bit clunky, so I revised the code and the BaseObject example here.

package Alice;
use base ('Engine::BaseObject');

sub OnPreSaySomething($)
{
     my ($self, $event) = @_;
     print ref($self),
          " thinks ",
          ref($event->Target()),
          " is about to say something.\n";

}

sub OnPostSaySomething($)
{
     my ($self, $event) = @_;

     print ref($self),
          " says '",
          $event->Param('Message'),
          "'\n";
}

1;

package Bob;
use base ('Engine::BaseObject');

sub OnSaySomething($)
{
     my ($self, $event) = @_;

     print ref($self),
          " says 'Hello, ",
          ref($event->Target()),
          "!'\n";
}

1;

package main;

my $alice = Alice->new();
my $bob = Bob->new();

# Alice is now listening to Bob
$bob->AddEventListener($alice);
$bob->SaySomething( message => 'Hello, Alice');

Yields output:
Alice thinks Bob is about to say something.
Bob says 'Hello, Alice'
Alice says 'Hello, Bob!'


a

 

November 2009
M T W T F S S
« Aug    
 1
2345678
9101112131415
16171819202122
23242526272829
30