Самое простое - использовать duck_type вместо роли для проверки вашего интерфейса. Duck_type - более слабое ограничение, в основном duck_type - это просто список методов, которые должен иметь объект. Например:
package MyMooseClass;
use Moose;
use Moose::Util::TypeConstraints qw/duck_type/;
has 'a' => (
isa => duck_type(qw/method1 method1 some_other_method/),
);
См. Moose :: Util :: TypeConstraints и прокрутите немного вниз, пока не увидите запись для duck_type . Это ограничение было добавлено специально для решения этой проблемы.
Если вы собираетесь многократно использовать это ограничение, вы можете захотеть взглянуть на его создание в классе библиотеки типов, что будет способствовать повторному использованию. Проверьте MooseX :: Типы .
Кстати, хотя использование Hash Reference в конструкторе поддерживается, и в течение долгого времени, прежде чем Moose считался лучшей практикой, большинство известных мне авторов Moose пропускают его и просто предоставляют список параметров конструктора. Это немного меньше печатать и выглядит чище, на мой взгляд:
my $instance = MyClass->new(param1=>'val1', param2=>'val2');
Суть подхода Hash Reference заключалась в том, чтобы помочь решить некоторые неясности, которые действительно не случаются, когда вы используете Moose для создания объекта Perl. Поскольку Moose имеет дело со всеми этими образцами и церемониями для вас, на мой взгляд, в этом нет необходимости, хотя стили бывают разные. Мои два цента.
Полегче,
John