[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>