From: "Michael Kraus" <[EMAIL PROTECTED]>
> If a sublass has overrides a method in a superclass, and the
> subclasses method calls the superclass's method, is there any
> mechanism to detect that the superclass' method has been overridden?
> 
> 
> 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.
> 
> I'm guessing there is no in-built functionality for this, and I'll
> have to examine my classes to discover how to test for it myself. Is
> it possible to confirm this?

if I understand you right you want to have something like this:

package Base::Class;

...
sub theMethod {
        if (called from a child's theMethod()) {
                do something sensible
        } else {
                die "Base::Class->theMethod() has to be overriden!\n";
        }
}
...

package First::Child;
use base 'Base::Class';
...
sub theMethod {
        my $self = shift;
        do something
        $self->SUPER::theMethod();
        do something more
}
...

package Second::Child;
use base 'Base::Class';
...
# no sub theMethod {}

package main;

my $obj1 = new First::Class;
$obj1->theMethod(); # goes fine

my $obj2 = new Second::Class;
$obj2->theMethod(); # dies

__END__

Right?

I think the best you can get is to use caller(). This will tell you 
whether your Base::Class::theMethod() is called from a 
some::package::theMethod() or from something else. If you want to be 
more safe you may try to make sure the some::package inherits from 
Base::Class ( some::package->isa('Base::Class') ).

Jenda

===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed 
to get drunk and croon as much as they like.
        -- Terry Pratchett in Sourcery


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