Роли основаны на типажах и выполняют ту же роль, что и классы-примеси. Они напоминают интерфейсы, но в отличие от них включают реализацию методов по умолчанию.
Объектная система Moose поддерживает резидентную метамодель: её можно изменять и расширять путём написания классов и ролей средствами самого Moose. Moose используется многими CPAN-расширениями, существует ряд модулей расширения Moose[1]. Начиная с версии 5.8 на объектной системе Moose основан Model-View-Controllerвеб-фреймвокCatalyst[3]
Пример
Ниже определяется класс Point (точка) и его подкласс Point3D (3-мерная точка):
packagePoint;useMoose;useCarp;has'x'=>(isa=>'Num',is=>'rw');has'y'=>(isa=>'Num',is=>'rw');subclear{my$self=shift;$self->x(0);$self->y(0);}subset_to{@_==3orcroak"Bad number of arguments";my$self=shift;my($x,$y)=@_;$self->x($x);$self->y($y);}packagePoint3D;useMoose;useCarp;extends'Point';has'z'=>(isa=>'Num',is=>'rw');after'clear'=>sub{my$self=shift;$self->z(0);};subset_to{@_==4orcroak"Bad number of arguments";my$self=shift;my($x,$y,$z)=@_;$self->x($x);$self->y($y);$self->z($z);}
В классе Point3D переопределяется методы set_to() и clear(), первый из них не вызывает метод родительского класса, второй — вызывает.
Tom Christiansen, Larry Wall, Brian Foy and Jon Orwant.Ch. 12. Objects. -> The Moose in the Room // Programming Perl: Unmatched Power for Text Processing and Scripting. — O'Reilly Media, 2012. — P. 453-455. — 1130 p. — ISBN 0596004923, 9780596004927.
Kieren Diment and Matt S Trout with Eden Cardim, Jay Kuri, and Jess Robinson.Ch.2 Catalyst Setup and Background Knowledge -> Catalyst Background Knowledge -> Object-Oriented Programming with Moose // The Definitive Guide to Catalyst. Writing Extensible, Scalable, and Maintainable Perl-Based Web Applications. — Apress, 2009. — P. 28-44. — 362 p. — ISBN 978-1-4302-2365-8.