Commit | Line | Data |
---|---|---|
daa0fd7d | 1 | package Moose::Cookbook::Snack::Keywords; |
2 | ||
3 | # ABSTRACT: Restricted "keywords" in Moose | |
4499a7ab | 4 | |
daa0fd7d | 5 | __END__ |
4499a7ab | 6 | |
daa0fd7d | 7 | =pod |
4499a7ab | 8 | |
4499a7ab | 9 | =head1 DESCRIPTION |
10 | ||
eec11834 | 11 | Moose exports a number of sugar functions in order to emulate Perl |
12 | built-in keywords. These can cause clashes with other user-defined | |
13 | functions. This document provides a list of those keywords for easy | |
14 | reference. | |
4499a7ab | 15 | |
16 | =head2 The 'meta' keyword | |
17 | ||
eec11834 | 18 | While most collisions can be avoided, you cannot avoid importing a |
19 | C<meta> method when you C<S<use Moose>>. If you try to override or | |
20 | change what C<meta> does, you could end up breaking Moose internals. | |
4499a7ab | 21 | |
eec11834 | 22 | =head2 Moose Keywords |
4499a7ab | 23 | |
eec11834 | 24 | If you are using L<Moose> or L<Moose::Role> its best to avoid these |
47b19570 | 25 | keywords: |
4499a7ab | 26 | |
27 | =over 4 | |
28 | ||
eec11834 | 29 | =item extends |
4499a7ab | 30 | |
eec11834 | 31 | =item with |
4499a7ab | 32 | |
eec11834 | 33 | =item has |
4499a7ab | 34 | |
eec11834 | 35 | =item before |
4499a7ab | 36 | |
eec11834 | 37 | =item after |
4499a7ab | 38 | |
eec11834 | 39 | =item around |
4499a7ab | 40 | |
eec11834 | 41 | =item super |
4499a7ab | 42 | |
eec11834 | 43 | =item override |
4499a7ab | 44 | |
eec11834 | 45 | =item inner |
4499a7ab | 46 | |
eec11834 | 47 | =item augment |
4499a7ab | 48 | |
eec11834 | 49 | =item confess |
4499a7ab | 50 | |
eec11834 | 51 | =item blessed |
4499a7ab | 52 | |
53 | =back | |
54 | ||
eec11834 | 55 | =head2 Moose::Util::TypeConstraints Keywords |
4499a7ab | 56 | |
eec11834 | 57 | If you are using L<Moose::Util::TypeConstraints> its best to avoid |
58 | these keywords | |
4499a7ab | 59 | |
60 | =over 4 | |
61 | ||
eec11834 | 62 | =item type |
4499a7ab | 63 | |
eec11834 | 64 | =item subtype |
4499a7ab | 65 | |
eec11834 | 66 | =item class_type |
4499a7ab | 67 | |
eec11834 | 68 | =item role_type |
4499a7ab | 69 | |
eec11834 | 70 | =item maybe_type |
4499a7ab | 71 | |
eec11834 | 72 | =item as |
4499a7ab | 73 | |
eec11834 | 74 | =item where |
75 | ||
76 | =item message | |
4499a7ab | 77 | |
78 | =item optimize_as | |
79 | ||
eec11834 | 80 | =item coerce |
4499a7ab | 81 | |
eec11834 | 82 | =item from |
4499a7ab | 83 | |
84 | =item via | |
85 | ||
86 | =item enum | |
87 | ||
88 | =item find_type_constraint | |
89 | ||
90 | =item register_type_constraint | |
91 | ||
92 | =back | |
93 | ||
94 | =head2 Avoiding collisions | |
47b19570 | 95 | |
4499a7ab | 96 | =head3 Turning off Moose |
97 | ||
eec11834 | 98 | To remove the sugar functions L<Moose> exports just add C<S<no Moose>> |
99 | at the bottom of your code: | |
47b19570 | 100 | |
101 | package Thing; | |
102 | use Moose; | |
4499a7ab | 103 | |
47b19570 | 104 | # code here |
4499a7ab | 105 | |
47b19570 | 106 | no Moose; |
4499a7ab | 107 | |
eec11834 | 108 | This will unexport the sugar functions that L<Moose> originally |
109 | exported. The same will also work for L<Moose::Role> and | |
110 | L<Moose::Util::TypeConstraints>. | |
4499a7ab | 111 | |
eec11834 | 112 | =head3 Sub::Exporter features |
4499a7ab | 113 | |
eec11834 | 114 | L<Moose>, L<Moose::Role> and L<Moose::Util::TypeConstraints> all use |
115 | L<Sub::Exporter> to handle all their exporting needs. This means that | |
116 | all the features that L<Sub::Exporter> provides are also available to | |
117 | them. | |
4499a7ab | 118 | |
47b19570 | 119 | For instance, with L<Sub::Exporter> you can rename keywords, like so: |
4499a7ab | 120 | |
47b19570 | 121 | package LOL::Cat; |
122 | use Moose 'has' => { -as => 'i_can_haz' }; | |
eec11834 | 123 | |
47b19570 | 124 | i_can_haz 'cheeseburger' => ( |
eec11834 | 125 | is => 'rw', |
126 | trigger => sub { print "NOM NOM" } | |
47b19570 | 127 | ); |
eec11834 | 128 | |
47b19570 | 129 | LOL::Cat->new->cheeseburger('KTHNXBYE'); |
4499a7ab | 130 | |
47b19570 | 131 | See the L<Sub::Exporter> docs for more information. |
4499a7ab | 132 | |
133 | =head3 namespace::clean | |
134 | ||
eec11834 | 135 | You can also use L<namespace::clean> to clean up your namespace, but |
136 | you must be careful not to remove C<meta> when doing so: | |
47b19570 | 137 | |
138 | package Foo; | |
139 | use Moose; | |
140 | use namespace::clean -except => 'meta'; | |
141 | # ... | |
142 | ||
143 | =head1 SEE ALSO | |
144 | ||
145 | =over 4 | |
146 | ||
147 | =item L<Moose> | |
4499a7ab | 148 | |
47b19570 | 149 | =item L<Moose::Role> |
150 | ||
151 | =item L<Moose::Utils::TypeConstraints> | |
152 | ||
153 | =item L<Sub::Exporter> | |
154 | ||
155 | =item L<namespace::clean> | |
156 | ||
157 | =back | |
158 | ||
4499a7ab | 159 | =cut |