Sometimes there is too much flexibility.
Moose is built on Class::MOP, which implements a meta-object protocol. The MOP lays out a well-defined abstraction for the components of an object system and how they are supposed to behave and interact. That well-defined abstraction is what the Perl object system lacks, so Class::MOP builds one on top of the Perl object system and has it provide the API for things like Moose.
I respectfully but hardly disagree. Without the flexibility, we'd have
one solution. Maybe it would be like Moose, maybe it would be another. But it certainly couldn't evolve in the way it does. So, for my part: Hooray for flexibility.
YMMV.
Ordinary morality is for ordinary people. -- Aleister Crowley