++ed by:

114 PAUSE user(s)
68 non-PAUSE user(s).

Graham Knop
and 1 contributors


  • Moo - Minimalist Object Orientation (with Moose compatibility)
  • Moo::Role - Minimal Object Orientation support for Roles
  • Sub::Defer - defer generation of subroutines until they are first called
  • Sub::Quote - efficient generation of subroutines via string eval
  • oo - syntactic sugar for Moo oneliners


Changes for version 2.000000

  • Incompatible Changes
    • Fatal warnings and the other additional checks from the strictures module will no longer be applied to modules using Moo or Moo::Role. We now only apply strict and (non-fatal) warnings, matching the behavior of Moose.
    • Classes without attributes used to store everything passed to ->new in the object. This has been fixed to not store anything in the object, making it consistent with classes that had attributes.
    • Moo will now pass __no_BUILD__ to parent constructors when inheriting from a Moose or Class::Tiny class, to prevent them from calling BUILD functions. Moo calls the BUILD functions itself, which previously led to them being called multiple times.
    • Attempting to replace an existing constructor, or modify one that has been used, will throw an error. This includes adding attributes. Previously, this would result in some attributes being silently ignored by the constructor.
    • If a class's @ISA is modified without using 'extends' in a way that affects object construction, Moo will detect this and throw an error. This can happen in code that uses ->load_components from Class::C3::Componentised, which is common in DBIx::Class modules.
  • Bug Fixes
    • Fix calling class methods on Moo::HandleMoose::FakeMetaClass, such as modules scanning all classes
  • Miscellaneous
    • use Sub::Util instead of Sub::Name if available