There are a couple of tricks I use in this sort of context. Consider:
use strict; use warnings; sub new { my ($class, $act) = @_; my %activities = ( ACT => $act, ACTIVITIES => { 'Sale' => {datefield => "date_sold",}, 'Purchae' => {datefield => "date_bought",}, } ); my $self = bless \%activities, $class; return $self; } sub get_stats { my ($self, $arg) = @_; my $funcName = "_do$self->{ACT}"; my $func = $self->can($funcName); die "Class " . ref($self) . " doesn't know how to '$funcName'\n" i +f !$func; $self->$func($arg); } sub _doSale { my ($self, $arg) = @_; $self->dosomething($arg); } sub _doPurchae { my ($self, $arg) = @_; ... } sub dosomething { my ($self, $arg) = @_; print "This is test ($arg)...\n"; } my $obj = main->new('Sale'); $obj->get_stats('wibble');
Prints:
This is test (wibble)...
$self->can lets you preflight the call so you have some control over error handling.
my $funcName = "_do$self->{ACT}"; ensures only expected members can be called.
In reply to Re: Hash of subroutines as member of a class
by GrandFather
in thread Hash of subroutines as member of a class
by Hameed
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |