
use lib './lib';

package Foo;
use base Class::Observable;

my $PINGS = 1;

sub new { bless {} , $_[0] }
sub ping { my $s = shift;
           print "$s ping...\n";
           $s->notify_observers('ping', $PINGS++);
           print "$s ping finished.\n";
         }

package OB;

my $NAME;
BEGIN { $NAME = "a" };

sub new { bless {NAME => $NAME++ } , $_[0] }

sub update { my $s = shift;
             my $n = ref($s) ? $s->{NAME} : "CLASS";
             print "Observer '$n' sees (@_)\n";
           }

package main;


my $F1 = Foo->new();
my $F2 = Foo->new();

my $o1 = OB->new();
my $o2 = OB->new();

$F1->add_observer('OB');
Foo->add_observer($o2);

$F1->ping;
$F2->ping;
