my $case = new Case1(...); ... print $case->xml; Package Guts; sub new { ... } sub xml { return '...'; } Package Case1; BEGIN { @Case1::ISA = qw(Guts) } sub xml { my $self = shift; return '' . $self->SUPER::xml . ''; } Package Case2; BEGIN { @Case2::ISA = qw(Guts) } sub xml { my $self = shift; return '' . $self->SUPER::xml . ''; }