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
[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!'