package Animal; sub new { return bless {},"Animal"; } sub speak { }; 1; package Animal::Dog; use Animal; our @ISA = qw/ Animal /; sub new { return bless {},"Animal::Dog"; } sub speak { print "Woof!\n"; } 1; package Animal::Cat; use Animal; our @ISA= qw/ Animal /; sub new { reutrn bless {},"Animal::Cat"; } sub speak { print "Meow!\n"; } 1; -- ad nauseum --