118 lines
2.7 KiB
Plaintext
118 lines
2.7 KiB
Plaintext
# PODNAME: Moose::Cookbook::Meta::WhyMeta
|
|
# ABSTRACT: Welcome to the meta world (Why Go Meta?)
|
|
|
|
__END__
|
|
|
|
=pod
|
|
|
|
=encoding UTF-8
|
|
|
|
=head1 NAME
|
|
|
|
Moose::Cookbook::Meta::WhyMeta - Welcome to the meta world (Why Go Meta?)
|
|
|
|
=head1 VERSION
|
|
|
|
version 2.2207
|
|
|
|
=head1 SUMMARY
|
|
|
|
You might want to read L<Moose::Manual::MOP> if you haven't done so
|
|
yet.
|
|
|
|
If you've ever thought "Moose is great, but I wish it did X
|
|
differently", then you've gone meta. The meta recipes demonstrate how
|
|
to change and extend the way Moose works by extending and overriding
|
|
how the meta classes (L<Moose::Meta::Class>,
|
|
L<Moose::Meta::Attribute>, etc) work.
|
|
|
|
The metaclass API 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 make changes to a class, for
|
|
example by adding new methods or attributes.
|
|
|
|
The interface presented by L<Moose.pm|Moose> (C<has>, C<with>,
|
|
C<extends>) is just a thin layer of syntactic sugar over the
|
|
underlying metaclass system.
|
|
|
|
By extending and changing how this metaclass system works, you can
|
|
create your own Moose variant.
|
|
|
|
=head2 Examples
|
|
|
|
Let's say that you want to add additional properties to
|
|
attributes. Specifically, we want to add a "label" property to each
|
|
attribute, so we can write C<<
|
|
My::Class->meta()->get_attribute('size')->label() >>. The first
|
|
recipe shows how to do this using an attribute trait.
|
|
|
|
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 C<< My::Class->meta()->table_name() >>.
|
|
|
|
=head1 SEE ALSO
|
|
|
|
Many of the MooseX modules on CPAN implement metaclass extensions. A
|
|
couple good examples include L<MooseX::Aliases> and
|
|
L<MooseX::UndefTolerant>. For a more complex example see
|
|
L<Fey::ORM> or L<Bread::Board::Declare>.
|
|
|
|
=head1 AUTHORS
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Stevan Little <stevan@cpan.org>
|
|
|
|
=item *
|
|
|
|
Dave Rolsky <autarch@urth.org>
|
|
|
|
=item *
|
|
|
|
Jesse Luehrs <doy@cpan.org>
|
|
|
|
=item *
|
|
|
|
Shawn M Moore <sartak@cpan.org>
|
|
|
|
=item *
|
|
|
|
יובל קוג'מן (Yuval Kogman) <nothingmuch@woobling.org>
|
|
|
|
=item *
|
|
|
|
Karen Etheridge <ether@cpan.org>
|
|
|
|
=item *
|
|
|
|
Florian Ragwitz <rafl@debian.org>
|
|
|
|
=item *
|
|
|
|
Hans Dieter Pearcey <hdp@cpan.org>
|
|
|
|
=item *
|
|
|
|
Chris Prather <chris@prather.org>
|
|
|
|
=item *
|
|
|
|
Matt S Trout <mstrout@cpan.org>
|
|
|
|
=back
|
|
|
|
=head1 COPYRIGHT AND LICENSE
|
|
|
|
This software is copyright (c) 2006 by Infinity Interactive, Inc.
|
|
|
|
This is free software; you can redistribute it and/or modify it under
|
|
the same terms as the Perl 5 programming language system itself.
|
|
|
|
=cut
|