You might want to read Moose::Manual::MOP if you havent done so
If youve ever thought Moose is great, but I wish it did X
differently, then youve gone meta. The meta recipes demonstrate how
to change and extend the way Moose works by extending and overriding
how the meta classes (Moose::Meta::Class,
Moose::Meta::Attribute, etc) work.
The metaclass API is a set of classes that describe classes, roles,
attributes, etc. The metaclass API lets you ask questions about a
class, like what attributes does it have?, or what roles does the
The metaclass system also lets you make changes to a class, for
example by adding new methods or attributes.
The interface presented by Moose.pm (has, with,
extends) is just a thin layer of syntactic sugar over the
underlying metaclass system.
By extending and changing how this metaclass system works, you can
create your own Moose variant.