Chapter 19. Introduction to Moose

Moose is a relatively new object system for Perl and is available from CPAN.[59] It’s become popular enough in the community that we think it deserves its own chapter in this book. We think everyone still needs to learn the basics of Perl, but when we get into the real world of programming, other people are going to tell us to use Moose.

The goal of Moose is to make OO Perl less tedious by making it easier for us to do the stuff we should do and probably normally skip. It also allows powerful code through its meta-object protocol, which we won’t cover here.

In this chapter, we go through the classes we created in the previous chapters and redo them with basic Moose features. We can cover only the basics; Moose deserves its own book.

Making Animals with Moose

First, we’ll create a horse class in Horse.pm that has a name and a color:

package Horse;
use Moose;

has 'name'  => ( is => 'rw' );
has 'color' => ( is => 'rw' );

no Moose;

__PACKAGE__>meta>make_immutable;

1;

Bringing in Moose defines has, which takes the name of an attribute along with its properties. Here, we’re saying that the two attributes are “read/write,” or rw. Moose sets up the accessors to set and fetch the values so we don’t have to.

When we are done defining our class, we use no Moose to unimport the subroutines that Moose imported. We can also use namespace::autoclean, which works not only for Moose, but other, non-Moose modules we might write:

package Horse;
use Moose;
use namespace:: ...

Get Intermediate Perl, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience live online training, plus books, videos, and digital content from nearly 200 publishers.