# NOTE: untested pseudo-code below! package Base; sub new { ... $self->{'requiredValue'} = getRequiredValue(); ... } # ensure that my child classes do things properly sub getRequiredValue { die "Subclasses must implement 'getRequiredValue'" } ... package Child1; sub getRequiredValue { 42 } # you know it's the answer :-) ... package Child2; sub getRequiredValue { 360 } ... package main; my ($c1, $c2); $c1 = Child1->new(); # Call trace looks like: # 1. Base::new # 2. Child1::getRequiredValue $c2 = Child2->new(); # This call trace is different: # 1. Base::new # 2. Child2::getRequiredValue !!!