[EMAIL PROTECTED] wrote:
> In article
>  <[EMAIL PROTECTED]>,
> [EMAIL PROTECTED] (Bob Showalter) writes: 
> > Michael Kraus wrote:
> > > I'm wanting to write a method in an abstract class that must be
> > > overriden by it's children. If it is called directly (i.e. without
> > > being overriden) then it registers an error, but if its called
> > > via an overriding method then do some common functionality.
> > 
> > That's not an abstract class.
> > 
> > Anyway, here's how to do it:
> > 
> >   sub foo {
> >       my $self = shift;
> >       my $class = ref $self;
> >       if ($class->can('foo') eq \&foo) {
> >           print "$class does not override foo\n";
> >       }
> >       else {
> >           print "$class overrides foo\n";
> >       }
> >   }
> > 
> > See perldoc UNIVERSAL for caveats on the can() method.
> 
> TMTOWTDI:
> 
> sub foo {
>   my $self = shift;
>   if (ref $self eq __PACKAGE__) {
>     print "Direct call\n";
>   }
>   else {
>     print "Called from subclass\n";
>   }

True, but that doesn't tell you whether the subclass has implemented foo()
or not, which was the OP's requirement.

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to