http://www.perlmonks.org?node_id=1156033

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

G'day wise monastery dwellers, I am using Moo and would like to be able to subclass some of my Moo::Roles, but unfortunately this does not seem to be possible (unless I'm doing something wrong). I'd like to be able to override the attributes in subclassed roles in addition to adding extra functions, e.g.
package BasicRole; use Moo::Role; has 'attrib' => ( is => 'ro' ); sub do_something { ... } 1; package NotSoBasicRole; use Moo; extends 'BasicRole'; has '+attrib' => ( default => sub { return 1; } ); 1; package SpecialRole; use Moo; extends 'NotSoBasicRole; has '+attrib' => ( default => sub { return 2; } ); sub do_something_else { ... } 1;
However, trying to extend a Moo::Role gives the error "Can't extend role" (see also https://github.com/moose/Moo/blob/master/t/extends-role.t). Is there a nice way to handle this situation?