#!/usr/bin/perl use strict; use warnings; package Top; sub new { my ($class, %params) = @_; my $self = bless \%params, $class; $self->{var1} = 'Top set var1'; $self->{var3} = 'Top set var3'; return $self; } sub doPrint { my ($self) = @_; print "Test: $self->{var1}\n"; } package Top::Extend1; push @Top::Extend1::ISA, 'Top'; sub doPrint { my ($self) = @_; print "Extend1 overrides doPrint: $self->{var1}\n"; } package Top::Extend2; push @Top::Extend2::ISA, 'Top'; sub new { my ($class, %params) = @_; my $self = $class->SUPER::new(%params); $self->{var1} = 'Top::Extend2 set var1'; return $self; } package main; my $test = Top->new(); my $one = Top::Extend1->new(something => 'extra'); my $two = Top::Extend2->new(); $test->doPrint(); $one->doPrint(); $two->doPrint(); #### Test: Top set var1 Extend1 overrides doPrint: Top set var1 Test: Top::Extend2 set var1