Overview
Moose is an extension of the object system of the Perl programming language. Its stated purpose is to bring modern object-oriented language features to Perl 5, and to make object-oriented Perl programming more consistent and less tedious.
Features
Moose is built on top of Class::MOP, a metaobject protocol ( MOP). Using the MOP, Moose provides complete introspection for all Moose-using classes.
Classes
Moose allows a programmer to create classes:
A class has zero or more attributes.
A class has zero or more methods.
A class has zero or more superclasses (a.k.a. parent classes). A class inherits from its superclass(es). Moose supports multiple inheritance.
A class has zero or more method modifiers. These modifiers can apply to its own methods, methods that are inherited from its ancestors or methods that are provided by roles.
A class does zero or more roles (also known as traits in other programming languages).
A class has a constructor and a destructor.
A class has a metaclass.
Attributes
An attribute is a property of the class that defines it.
An attribute always has a name, and it may have a number of other defining characteristics.
An attribute's characteristics may include a read/write flag, a type, accessor method names, delegations, a default value and lazy initialization.
From Wikipedia (CC BY-SA 4.0).