use strict; use warnings; package Base; sub new { my ($class, %args) = @_; return bless \%args, $class; } sub DoIt { my ($self) = @_; printf "In the base DoIt for an object of class %s\n", ref $self; } sub DoOther { my ($self) = @_; printf "In the base DoOther for an object of class %s\n", ref $self; } package Derived; use parent 'Base'; sub new { my ($class, %args) = @_; return $class->SUPER::new (%args); } sub DoIt { my ($self) = @_; printf "In the derived DoIt for an object of class %s\n", ref $self; $self->SUPER::DoIt (); } sub DoExtra { my ($self) = @_; printf "In the derived DoExtra for an object of class %s\n", ref $self; } package main; my $obj = Derived->new (); $obj->DoIt (); $obj->DoOther (); $obj->DoExtra (); #### In the derived DoIt for an object of class Derived In the base DoIt for an object of class Derived In the base DoOther for an object of class Derived In the derived DoExtra for an object of class Derived