package Default; use strict; sub new { my $class = shift; my $self = { }; return bless $self, $class; } sub handle { my ($class, $text) = @_; return $text; } 1; #### package Upper; use strict; use Default; use vars qw(@ISA); @ISA = qw(Default); sub handle { my ($class, $text) = @_; return uc($text); } 1; ################################ package Lower; use strict; use Default; use vars qw(@ISA); @ISA = qw(Default); sub handle { my ($class, $text) = @_; return lc($text); } 1; #### #!/usr/bin/perl -w use strict; use Default; use Upper; use Lower; my $arg = shift || ''; my %handlers = ( default => Default->new, upper => Upper->new, lower => Lower->new, ); my $ref = $handlers{$arg} || $handlers{'default'}; print $ref->handle("AaAaAaAa"), "\n";