# code above package foo unchanged package foo::alpha; BEGIN { @foo::alpha::ISA = qw( foo alpha ); } package foo::beta; BEGIN { @foo::beta::ISA = qw( foo beta ); } package foo; sub new{ my $class = shift; my $base = shift; return bless {}, "$class\::$base"; } # all other code unchanged