package Role { use Moose::Role; before foo => sub {}; } package Class { use Moose; sub foo {} with 'Role'; } #### package Class { use Moose; sub foo {} before foo => sub {}; } #### package Role { use Moose::Role; override foo => sub {}; } package Class { use Moose; sub foo {} with 'Role'; } #### package Class { use Moose; sub foo {} override foo => sub {}; } #### package Top { use Moose::Role; sub foo {} } package Bottom { use Moose::Role; override foo => sub {}; with 'Top'; } package Class { use Moose; with 'Bottom'; } #### package Class { use Moose; sub foo {}; override foo => sub {}; }