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 ();