package Animal;
package Sheep; @ISA = ('Animal');
package Cow; @ISA = ('Animal');
package Pig; @ISA = ('Animal');
####
sub make_animal
{
my ($sound) = @_;
if ($sound =~ /baa/) { return Sheep->new; }
if ($sound =~ /moo/) { return Cow->new; }
if ($sound =~ /oink/) { return Pig->new; }
}
####
package Sheep;
BEGIN {
our %::animal_sounds;
$::animal_sounds{'baa'} = 'Sheep';
}
####
sub make_animal
{
my ($sound) = @_;
foreach my $sounds_like (keys %::animal_sounds)
{
if ($sound =~ /$sounds_like/)
{
return ($::animal_sounds{$sounds_like})->new;
}
}
}