use MooseX::DefClass; class Foo { method foo {} class Bar { method bar {} } class Baz { method baz {} } } role Role { requires 'required_thing'; method role {} } class Moo::Kooh { extends 'Foo'; with 'Role'; method kooh {} method required_thing {} } class Corge extends Foo::Bar with Role { method corge {} method required_thing {} } class Quux extends Corge is immutable { method quux {} } 1;