Moose
Perlを使用し、受信データに基づいてクラスをインスタンス化するためのより簡単な、またはより良い(=>保守が容易な)方法はありますか?
次のコードは、私が取り組んでいるプロジェクトから抜粋したサンプルです。
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)=@_;
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を呼び出すときに発生することとほぼ同じであることに気づきました。渡すパラメータに応じて、(ほとんど)一貫性のあるインターフェイスを維持しながら、まったく異なるコードを使用します