Moose::Cookbook::Meta::Recipe1 - Welcome to the meta world (Why Go Meta?)
If you've ever found yourself thinking "Moose is great, but I wish it did X differently", then you've gone meta. The meta recipes are all about how to change and extend the way Moose does its thing, by changing how the various meta classes (Moose::Meta::Class, Moose::Meta::Attribute, etc) work.
Moose::Meta::Class
Moose::Meta::Attribute
The metaclass system is a set of classes that describe classes, roles, attributes, etc. The metaclass API lets you ask questions about a class, like "what attributes does it have?", or "what roles does the class do?"
The metaclass system also lets you actively make changes to a class, for example by adding new methods.
The interface with which you normally use Moose (has, with, extends) is just a thin layer of syntactic sugar over the underlying metaclass system.
has
with
extends
By extending and changing how this metaclass system works, you can in effect create a modified object implementation for your classes.
Let's say that you want to additional properties to attributes. Specifically, we want to add a "label" property to each attribute, so we can write My::Class->meta()->get_attribute('size')->label(). The first two recipes show two different ways to do this, one with a full meta-attribute subclass, and the other with an attribute trait.
My::Class->meta()->get_attribute('size')->label()
You might also want to add additional properties to your metaclass. For example, if you were writing an ORM based on Moose, you could associate a table name with each class via the class's metaclass object, letting you write My::Class->meta()->table_name().
My::Class->meta()->table_name()
Many of the MooseX modules on CPAN implement metaclass extensions. A couple good examples include MooseX::Singleton and MooseX::AttributeHelpers. For a more complex example see Fey::ORM.
MooseX::Singleton
MooseX::AttributeHelpers
Fey::ORM
Dave Rolsky <autarch@urth.org<gt>
Copyright 2008 by Infinity Interactive, Inc.
http://www.iinteractive.com
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Moose, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Moose
CPAN shell
perl -MCPAN -e shell install Moose
For more information on module installation, please visit the detailed CPAN module installation guide.