241 lines
3.9 KiB
Plaintext
241 lines
3.9 KiB
Plaintext
# PODNAME: Moose::Cookbook::Snack::Keywords
|
|
# ABSTRACT: Restricted "keywords" in Moose
|
|
|
|
__END__
|
|
|
|
=pod
|
|
|
|
=encoding UTF-8
|
|
|
|
=head1 NAME
|
|
|
|
Moose::Cookbook::Snack::Keywords - Restricted "keywords" in Moose
|
|
|
|
=head1 VERSION
|
|
|
|
version 2.2207
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
Moose exports a number of sugar functions in order to emulate Perl
|
|
built-in keywords. These can cause clashes with other user-defined
|
|
functions. This document provides a list of those keywords for easy
|
|
reference.
|
|
|
|
=head2 The 'meta' keyword
|
|
|
|
C<S<use Moose>> adds a method called C<meta> to your class. If this
|
|
conflicts with a method or function you are using, you can rename it,
|
|
or prevent it from being installed entirely. To do this, pass the
|
|
C<-meta_name> option when you C<S<use Moose>>. For instance:
|
|
|
|
# install it under a different name
|
|
use Moose -meta_name => 'moose_meta';
|
|
|
|
# don't install it at all
|
|
use Moose -meta_name => undef;
|
|
|
|
=head2 Moose Keywords
|
|
|
|
If you are using L<Moose> or L<Moose::Role> it is best to avoid these
|
|
keywords:
|
|
|
|
=over 4
|
|
|
|
=item extends
|
|
|
|
=item with
|
|
|
|
=item has
|
|
|
|
=item before
|
|
|
|
=item after
|
|
|
|
=item around
|
|
|
|
=item super
|
|
|
|
=item override
|
|
|
|
=item inner
|
|
|
|
=item augment
|
|
|
|
=item confess
|
|
|
|
=item blessed
|
|
|
|
=item meta
|
|
|
|
=back
|
|
|
|
=head2 Moose::Util::TypeConstraints Keywords
|
|
|
|
If you are using L<Moose::Util::TypeConstraints> it is best to avoid
|
|
these keywords:
|
|
|
|
=over 4
|
|
|
|
=item type
|
|
|
|
=item subtype
|
|
|
|
=item class_type
|
|
|
|
=item role_type
|
|
|
|
=item maybe_type
|
|
|
|
=item duck_type
|
|
|
|
=item as
|
|
|
|
=item where
|
|
|
|
=item message
|
|
|
|
=item inline_as
|
|
|
|
=item coerce
|
|
|
|
=item from
|
|
|
|
=item via
|
|
|
|
=item enum
|
|
|
|
=item find_type_constraint
|
|
|
|
=item register_type_constraint
|
|
|
|
=back
|
|
|
|
=head2 Avoiding collisions
|
|
|
|
=head3 Turning off Moose
|
|
|
|
To remove the sugar functions L<Moose> exports, just add C<S<no Moose>>
|
|
at the bottom of your code:
|
|
|
|
package Thing;
|
|
use Moose;
|
|
|
|
# code here
|
|
|
|
no Moose;
|
|
|
|
This will unexport the sugar functions that L<Moose> originally
|
|
exported. The same will also work for L<Moose::Role> and
|
|
L<Moose::Util::TypeConstraints>.
|
|
|
|
=head3 Sub::Exporter features
|
|
|
|
L<Moose>, L<Moose::Role> and L<Moose::Util::TypeConstraints> all use
|
|
L<Sub::Exporter> to handle all their exporting needs. This means that
|
|
all the features that L<Sub::Exporter> provides are also available to
|
|
them.
|
|
|
|
For instance, with L<Sub::Exporter> you can rename keywords, like so:
|
|
|
|
package LOL::Cat;
|
|
use Moose 'has' => { -as => 'i_can_haz' };
|
|
|
|
i_can_haz 'cheeseburger' => (
|
|
is => 'rw',
|
|
trigger => sub { print "NOM NOM" }
|
|
);
|
|
|
|
LOL::Cat->new->cheeseburger('KTHNXBYE');
|
|
|
|
See the L<Sub::Exporter> docs for more information.
|
|
|
|
=head3 namespace::autoclean and namespace::clean
|
|
|
|
You can also use L<namespace::autoclean> to clean up your namespace.
|
|
This will remove all imported functions from your namespace. Note
|
|
that if you are importing functions that are intended to be used as
|
|
methods (this includes L<overload>, due to internal implementation
|
|
details), it will remove these as well.
|
|
|
|
Another option is to use L<namespace::clean> directly, but
|
|
you must be careful not to remove C<meta> when doing so:
|
|
|
|
package Foo;
|
|
use Moose;
|
|
use namespace::clean -except => 'meta';
|
|
# ...
|
|
|
|
=head1 SEE ALSO
|
|
|
|
=over 4
|
|
|
|
=item L<Moose>
|
|
|
|
=item L<Moose::Role>
|
|
|
|
=item L<Moose::Util::TypeConstraints>
|
|
|
|
=item L<Sub::Exporter>
|
|
|
|
=item L<namespace::autoclean>
|
|
|
|
=item L<namespace::clean>
|
|
|
|
=back
|
|
|
|
=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
|