Я играл с этим кодом:
package Foo;
use Moose;
package main;
my $PACKAGE = "Foo";
{
no strict 'refs';
my $has = *{"${PACKAGE}::has"}{CODE};
my $with = *{"${PACKAGE}::with"}{CODE};
# Add a instance member to class $PACKAGE
$has->("bar", is => "rw", required => 1);
# Add a role to class $PACKAGE
$with->("some::role");
}
# Create an instance of $PACKAGE:
$PACKAGE->new(); # error: attribute 'bar' is required means we were successful
Это позволяет мне создавать класс Moose во время выполнения, то есть добавлять членов экземпляра в класс, добавлять роли и т. Д.
У меня такой вопрос: как я могу импортировать Moose в пакет $PACKAGE
?
Я знаю, что могу сделать это с помощью eval: eval "package $PACKAGE; use Moose";
, но мне интересно, есть ли решение в том же духе?из Moose->import(... $PACKAGE ...)
.
т.е. путь без использования eval
.Или существует совершенно другой способ создания и изменения классов Moose во время выполнения?