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;