package Something::Base; use Scalar::Util qw( refaddr ); use Moo::Role; # _ATTRIBUTES stuff doesnt seem to be inherited early enough with Moo? ## use strict; use warnings; { my %attrs; sub MODIFY_CODE_ATTRIBUTES { my ($package, $subref, @attrs) = @_; $attrs{ refaddr $subref } = \@attrs; return; } sub FETCH_CODE_ATTRIBUTES { my ($package, $subref) = @_; my $attrs = $attrs{ refaddr $subref } or return; return @$attrs; } } package Something::Else; use Moo; with 'Something::Base'; #use base 'Something::Base'; # this works! sub foo : Foo(bar) { return 1 }