Все, что сказал кубабит, - правда. Лучше обеспечить зависимость от API, а не от конкретной имплментации или типа. Однако, чтобы ответить на ваш конкретный вопрос так, как вы бы связали Baz
с требованием Bar
, нужно просто составить Bar
.
package Baz {
use Moose::Role;
with qw(Bar);
...
}
Тогда вы просто использовали бы Baz
в одиночку, когда сочинили его с Foo
во время выполнения.
my $foo = Foo->with_traits('Baz')->new(...);
$foo
, затем does()
и Baz
, и Bar
.