
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 $alarm = Alarm->new();
$alarm->add_observer(Guard->new("Fred"));
$alarm->notify_observers("I like pie!");

