my-server
← Wiki Redirected from Moose perl

Moose (Perl)

Moose is an extension of the object system of the Perl programming language. Its stated purpose is to bring modern object-oriented programming language features to Perl 5, and to make object-oriented Perl programming more consistent and less tedious.

Features

Moose is built on <code>Class::MOP</code>, a metaobject protocol (MOP). Using the MOP, Moose provides complete type 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.

Roles

Roles in Moose are based on traits. They perform a similar task as mixins, but are composed horizontally rather than inherited. They are also somewhat like interfaces, but unlike some implementations of interfaces they can provide a default implementation. Roles can be applied to individual instances as well as Classes.

  • A role has zero or more attributes.
  • A role has zero or more methods.
  • A role has zero or more method modifiers.
  • A role has zero or more required methods.

Extensions

There are a number of Moose extension modules on CPAN. there are 855 modules in 266 distributions in the MooseX namespace. Most of them can be optionally installed with the Task::Moose module.

Examples

This is an example of a class and its subclass :

There is a new <code>set_to()</code> method in the class so the method of the same name defined in the class is not invoked in the case of instances. The <code>clear()</code> method on the other hand is not replaced but extended in the subclass, so both methods are run in the correct order.

This is the same using the <code>MooseX::Declare</code> extension:

See also

References

External links