Moose::Role - The Moose Role


Moose::Role - The Moose Role


  package Eq;
  use Moose::Role; # automatically turns on strict and warnings
  requires 'equal';
  sub no_equal {
      my ($self, $other) = @_;
  # ... then in your classes
  package Currency;
  use Moose; # automatically turns on strict and warnings
  with 'Eq';
  sub equal {
      my ($self, $other) = @_;
      $self->as_float == $other->as_float;


Role support in Moose is pretty solid at this point. However, the best documentation is still the the test suite. It is fairly safe to assume Perl 6 style behavior and then either refer to the test suite, or ask questions on #moose if something doesn't quite do what you expect.

We are planning writing some more documentation in the near future, but nothing is ready yet, sorry.


Moose::Role currently supports all of the functions that Moose exports, but differs slightly in how some items are handled (see CAVEATS below for details).

Moose::Role also offers two role-specific keyword exports:

requires (@method_names)
Roles can require that certain methods are implemented by any class which does the role.

excludes (@role_names)
Roles can exclude other roles, in effect saying ``I can never be combined with these @role_names''. This is a feature which should not be used lightly.


Role support has only a few caveats:


All complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or add the bug to cpan-RT.


Stevan Little <>

Christian Hansen <>


Copyright 2006-2008 by Infinity Interactive, Inc.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

 Moose::Role - The Moose Role