package Base; use One; use Two; use Three; sub do { print "hi from Base\n"; Three::do; Two::do; One::do; } #### package Base ; use One; use Two; use Three; sub new { my $class = shift; bless { steps => [ qw(Three Two One) ] }, $class; } sub do { my $s = shift; print "hi from Base\n"; for my $step ( @{ $s->{steps} } ) { $step->do; } }