Скажем, я определяю абстрактный My::Object и конкретные реализации ролей My::Object::TypeA и My::Object::TypeB. Из соображений удобства обслуживания я бы не хотел иметь жестко закодированную таблицу, которая просматривает тип объекта и применяет роли. В качестве примера DWIMmy я ищу что-то в этом роде в My::Object:
has => 'id' (isa => 'Str', required => 1);
sub BUILD {
my $self = shift;
my $type = $self->lookup_type(); ## Returns 'TypeB'
{"My::Object::$type"}->meta->apply($self);
}
Позвольте мне получить My::Object с примененной ролью My::Object::TypeB, выполнив следующие действия:
my $obj = My::Object(id = 'foo')
Будет ли это делать то, что я хочу, или я на совершенно неправильном пути?
Изменить: я слишком упростил это; Я не хочу знать тип при создании экземпляра объекта, я хочу, чтобы объект определял свой тип и соответствующим образом применял правильные методы роли. Я отредактировал свой вопрос, чтобы сделать это более ясным.