Moose::Cookbook::Snack::Keywords(3pm)
NAME
Moose::Cookbook::Snack::Keywords - Restricted "keywords" in Moose
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. - The 'meta' keyword
- While most collisions can be avoided, you cannot avoid importing a
"meta" method when you "use Moose". If you try to override or change
what "meta" does, you could end up breaking Moose internals. - Moose Keywords
- If you are using Moose or Moose::Role its best to avoid these keywords:
- extends
with
has
before
after
around
super
override
inner
augment
confess
blessed - Moose::Util::TypeConstraints Keywords
- If you are using Moose::Util::TypeConstraints its best to avoid these
keywords - type
subtype
class_type
role_type
maybe_type
as
where
message
optimize_as
coerce
from
via
enum
find_type_constraint
register_type_constraint - Avoiding collisions
- Turning off Moose
- To remove the sugar functions Moose exports just add "no Moose" at the
bottom of your code:
package Thing;
use Moose;# code hereno Moose; - This will unexport the sugar functions that Moose originally exported.
The same will also work for Moose::Role and
Moose::Util::TypeConstraints. - Sub::Exporter features
- Moose, Moose::Role and Moose::Util::TypeConstraints all use
Sub::Exporter to handle all their exporting needs. This means that all the features that Sub::Exporter provides are also available to them. - For instance, with 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 Sub::Exporter docs for more information.
- namespace::clean
- You can also use namespace::clean to clean up your namespace, but you
must be careful not to remove "meta" when doing so:
package Foo;
use Moose;
use namespace::clean -except => 'meta';
# ...
SEE ALSO
Moose
Moose::Role
Moose::Utils::TypeConstraints
Sub::Exporter
namespace::clean
AUTHOR
John Goulah "<jgoulah@cpan.org<gt">
Stevan Little <stevan@iinteractive.com>
COPYRIGHT AND LICENSE
Copyright 2006-2010 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.