# file noname1.pm: use strict; use warnings; package Hello; sub new { my $type = shift; # Call as: Hello->new (); my $class = ref $type || $type; return bless {}, $class; } sub hi { my ($self, $tail) = @_; $tail ||= ''; return 'Hello' . $tail; } 1; package World; use noname1; use base qw(Hello); sub new { my $type = shift; # Call as: World->new (); my $class = ref $type || $type; return Hello::new ($class); } sub hi { my ($self, $tail) = @_; $tail ||= ''; # Now call up to get base class work done return $self->Hello::hi (' World' . $tail); } 1; #file noname.pl: use strict; use warnings; use noname1; my $hi = World->new (); # Create derived class object print $hi->hi ('. How goes it?'); # Call method on derived class object #### Hello World. How goes it?