MainApp.pm
MyModel.pm
config
####
model:MyModel
option:Value
##
##
sub train {
my ($himself, $training_data) = @_;
my $option = $himself->{'option'};
...
}
##
##
sub new {
my ($class, $conf_file) = @_
my $options = read_conf($conf_file);
# now $options == {model=>'MyModel',option=>'Value'}
eval "require $options->{model}";
return bless $options, $class;
}
sub train_model {
my ($self, $raw_data) = @_;
my $data = do_magic_with($raw_data);
#Either:
no strict 'refs';
&"$self->{model}::train"($self, $data);
#Or:
my $model = $self;
bless $model, $self->{'model'};
$model->train($data);
#Or:
{
local @ISA = $self->{model};
$self->train($data);
}
}