package Parent; sub new { my $invocant = shift; my $class = ref($invocant) || $invocant; my $self = {}; bless $self, $class; $self->init(@_); return $self; } sub init { return; # or die to force child class to do something here } package Child; use base qw(Parent); sub init { # do child specific stuff; }