
use lib './lib';

package Alarm;
use base Class::Observable;

sub new { bless {} , $_[0] }

package Guard;

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

sub new { my $class = shift;
          my $name = shift || $NAME++;
          bless {NAME => $name++ } , $class }

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

package main;

my $g = Guard->new("Fred");
my $a1 = Alarm->new;
$a1->add_observer($g);
$a1->notify_observers("I like pie!");
undef $a1;

my $a2 = Alarm->new;
$a2->notify_observers("I like pie!");

