#!/usr/bin/perl -w use strict; {package Animal; sub named { my $class = shift; my $name = shift; bless \$name, $class; } sub name { my $self = shift; #is self an object or a class ref $self ? $$self : "unnamed $self"; } sub speak { my $self = shift; print $self->name ." goes ". $self->sound() .".\n"; } } {package Horse; use base qw/Animal/; sub sound {'neiggghhhh'}; } {package Mouse; use base qw/Animal/; sub sound {'Meep'}; #overwrite speak sub speak { my $class = shift; $class->SUPER::speak(@_); print "[But you can barely hear it]\n"; } } print "Choose between the following animals,\nseperate them by space:\n"; my %animals = (Horse => 0, Mouse => 0); print join(" ", sort keys %animals) ."\n\n"; chomp(my $user_animals = ); my @user_animals = split/ /, $user_animals; for (@user_animals) { $_ = ucfirst($_); if(exists($animals{$_})) {$animals{$_}++}; } while ( my ($key, $value) = each(%animals) ) { my $tmp = $key->named('Test'); $tmp->speak for(1..$value); }