if ($act eq 'open_file'){
#stuff;
}
elsif ( $act eq 'open_stuff') {
# stuff;
}
elsif ( $act eq 'speak' ) {
# stuff;
}
####
package My::Actions;
use Carp;
sub factory {
my ($class, $action) = @_;
my %actions = (
open_file => 'My::Actions::OpenFile',
open_stuff => 'My::Actions::OpenStuff',
speak => 'My::Actions::Speak'
);
croak "Unknown action ($action)" unless exists $actions{$action};
my $class = $actions{$action};
return $class->new;
}
sub do_stuff {
my $class = shift;
croak "Class ($class) did not implement do_stuff()";
}
####
use My::Actions;
my $object = My::Actions->factory($act);
$object->do_stuff;