use strict; use warnings; # Parent class. package Foo; sub new { my $class = shift; my $subclass = shift; { no strict 'refs'; push @{"${subclass}::ISA"}, "Foo" unless grep {$_ eq "Foo"} @{"${subclass}::ISA"} } bless {} => $subclass; } package Alpha; sub read {return "Alpha"} package Beta; sub read {return "Beta"} my $oa = Foo->new("Alpha"); my $ob = Foo->new("Beta");