package Moose::Cookbook::Snack::Keywords;
# ABSTRACT: Restricted "keywords" in Moose
__END__
=pod
=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
While most collisions can be avoided, you cannot avoid importing a
C method when you C>. If you try to override or
change what C does, you could end up breaking Moose internals.
=head2 Moose Keywords
If you are using L or L its 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
=back
=head2 Moose::Util::TypeConstraints Keywords
If you are using L its best to avoid
these keywords
=over 4
=item type
=item subtype
=item class_type
=item role_type
=item maybe_type
=item as
=item where
=item message
=item optimize_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 exports just add C>
at the bottom of your code:
package Thing;
use Moose;
# code here
no Moose;
This will unexport the sugar functions that L originally
exported. The same will also work for L and
L.
=head3 Sub::Exporter features
L, L and L all use
L to handle all their exporting needs. This means that
all the features that L provides are also available to
them.
For instance, with L 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 docs for more information.
=head3 namespace::clean
You can also use L to clean up your namespace, but
you must be careful not to remove C when doing so:
package Foo;
use Moose;
use namespace::clean -except => 'meta';
# ...
=head1 SEE ALSO
=over 4
=item L
=item L
=item L
=item L
=item L
=back
=cut