in reply to How to do basic inheritance in Perl OO?

my $tools = new TOOLS; $tools->SUPER::Callme(); # it should call the AGENT::Callme $tools->Callme();
If you need to do this outside of the TOOLS package, you're doing something very wrong. The code that's using the $tools object should not need to know or care what $tool's inheritance chain is. If your TOOL's Callme() cannot work without also using AGENT::Callme(), then you should set it up so that AGENT::Callme is called automatically from TOOL::Callme, not rely on the user to do it for you. Same goes for new().
package TOOLS; sub new { my ($package) = @_; my $self = $package->SUPER::new(); # do other stuff, or remove this whole sub if # you're not acutally doing anything in this # method and let AGENT's new() method do all the work. return $self; } sub Callme { my ($self) = @_; $self->SUPER::Callme(); # do stuff. }
As explained by someone else above, you can't (and shouldn't) use SUPER outside of the package that is the subclass.