package Dog::Proxy; use strict; use Dog::Base; use Dog::Cocker; use Dog::CattleDog; my %derived_classes = ( cocker => 'Dog::Cocker', cattledog => 'Dog::CattleDog', ); sub new { my $class = shift; die if ref $class; my $type = shift; die "Cant create Dog::Base without breed" unless $type; die "Type $type not registered" unless exists $derived_classes{$type}; my $class = $derived_classes{$type}; return $class->new(); } 1;