Есть ли более простой или лучший (= > проще поддерживать) способ использования Perl и Moose
для создания экземпляров классов на основе входящих данные?
Следующий код - это урезанный образец из проекта, над которым я работаю.
package FooBar;
use Moose;
has 'SUBCLASS' =>('isa'=>'Str',required=>'1',is=>'ro');
has 'MSG' =>('isa'=>'Str',required=>'1',is=>'ro');
sub BUILD {
my $self = shift;
my ($a)[email protected]_;
bless($self,$a->{SUBCLASS})
}
sub Hi {
my $self=shift;
print "Hi, I'm a " . ref($self) ." and I say [". $self->MSG()."]\n";
}
package Foo;
use Moose;
extends ("FooBar");
package Bar;
use Moose;
extends ("FooBar");
package main;
use strict;
use warnings;
for my $line (<DATA>) {
my ($case,$msg)=split(/[\n\r,]\s*/,$line);
FooBar->new(SUBCLASS=>$case,MSG=>$msg)->Hi();
}
__DATA__
Foo, First Case
Bar, Second Case
РЕДАКТИРОВАТЬ: мне просто показалось, что это в значительной степени происходит, когда вы вызываете DBI. В зависимости от параметров, которые вы передаете, он будет использовать совершенно другой код при сохранении (в основном) согласованного интерфейса