home *** CD-ROM | disk | FTP | other *** search
/ CLIX - Fazer Clix Custa Nix / CLIX-CD.cdr / mac / lib / Mac / Hooks.pm < prev    next >
Text File  |  1998-03-13  |  809b  |  45 lines

  1. =head1 NAME
  2.  
  3. Hooks.pm - Allow simple overrides of member functions
  4.  
  5. =head1 SYNOPSIS
  6.  
  7.     $obj->sethook("xxx", \&proc);
  8.     $proc = $obj->gethook("xxx");
  9.     $obj->callhook("xxx", $y, $z);
  10.  
  11. =head1 DESCRIPTION
  12.  
  13. To make it possible to override member functions without having to introduce a
  14. subclass, functions check for the existence of a hook procedure to substitute.
  15. C<callhook> calls the substitute and returns undef if there was none.
  16.  
  17. =cut
  18.     
  19. package Mac::Hooks;
  20.  
  21. sub sethook {
  22.     my($my,$hook,$proc) = @_;
  23.     if ($proc) {
  24.         $my->{$hook} = $proc;
  25.     } else {
  26.         delete $my->{$hook};
  27.     }
  28. }
  29. sub gethook {
  30.     my($my,$hook) = @_;
  31.     
  32.     $my->{$hook};
  33. }
  34. sub callhook {
  35.     my($my)   = shift @_;
  36.     my($hook) = shift @_;
  37.     if ($hook = $my->{$hook}) {
  38.         $hook = &$hook(@_);
  39.         $hook = "Sort of defined" unless defined ($hook);
  40.     }
  41.     $hook;
  42. }
  43.  
  44. 1;
  45.