package top; use Moose::Role; requires 'token'; sub foo { print "foo\n"; } sub useful_method{ print "I'm useful\n" } package bottom; use Moose::Role; with 'top'; override 'foo' => sub { print "bar\n"; }; package something; use Moose; with "bottom"; sub token { print "implement me in the concrete class"; } package main; my $something = new something; $something->foo;