Простой или лучше (= >) для использования Perl и Moose
для создания классов на основе входящих данных?Как я могу закодировать завод в 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
EDIT: Это просто поразило меня, что это довольно много, что происходит, когда вы звоните в DBI. В зависимости от параметров, которые Вы передаете, он будет использовать совершенно другой код при сохранении (в основном) последовательного интерфейса
спасибо, займет у меня некоторое время, чтобы заглянуть :-) – lexu
** имеет [qw (SUBCLASS MSG)] => (is => 'ro', required => 1); ** аккуратный трюк .. но "неинтуитивный" для всех, кто не знаком с perl .. – lexu
Нет, это не так. Он является частью API Moose и не имеет ничего общего с Perl. (Если вы хотите быть неинтуитивным, вы должны написать «имеет $ _ => (...) для qw/SUBCLASS MSG /». Но, конечно, все знают, что это делает.) – jrockway