1Moose(3)              User Contributed Perl Documentation             Moose(3)
2
3
4

NAME

6       Moose - A postmodern object system for Perl 5
7

SYNOPSIS

9         package Point;
10         use Moose; # automatically turns on strict and warnings
11
12         has 'x' => (is => 'rw', isa => 'Int');
13         has 'y' => (is => 'rw', isa => 'Int');
14
15         sub clear {
16             my $self = shift;
17             $self->x(0);
18             $self->y(0);
19         }
20
21         package Point3D;
22         use Moose;
23
24         extends 'Point';
25
26         has 'z' => (is => 'rw', isa => 'Int');
27
28         after 'clear' => sub {
29             my $self = shift;
30             $self->z(0);
31         };
32

DESCRIPTION

34       Moose is an extension of the Perl 5 object system.
35
36       The main goal of Moose is to make Perl 5 Object Oriented programming
37       easier, more consistent and less tedious. With Moose you can to think
38       more about what you want to do and less about the mechanics of OOP.
39
40       Additionally, Moose is built on top of Class::MOP, which is a metaclass
41       system for Perl 5. This means that Moose not only makes building normal
42       Perl 5 objects better, but it provides the power of metaclass
43       programming as well.
44
45   New to Moose?
46       If you're new to Moose, the best place to start is the Moose::Manual
47       docs, followed by the Moose::Cookbook. The intro will show you what
48       Moose is, and how it makes Perl 5 OO better.
49
50       The cookbook recipes on Moose basics will get you up to speed with many
51       of Moose's features quickly. Once you have an idea of what Moose can
52       do, you can use the API documentation to get more detail on features
53       which interest you.
54
55   Moose Extensions
56       The "MooseX::" namespace is the official place to find Moose
57       extensions.  These extensions can be found on the CPAN.  The easiest
58       way to find them is to search for them
59       (<http://search.cpan.org/search?query=MooseX::>), or to examine
60       Task::Moose which aims to keep an up-to-date, easily installable list
61       of Moose extensions.
62

TRANSLATIONS

64       Much of the Moose documentation has been translated into other
65       languages.
66
67       Japanese
68           Japanese docs can be found at
69           http://perldoc.perlassociation.org/pod/Moose-Doc-JA/index.html
70           <http://perldoc.perlassociation.org/pod/Moose-Doc-JA/index.html>.
71           The source POD files can be found in GitHub:
72           http://github.com/jpa/Moose-Doc-JA <http://github.com/jpa/Moose-
73           Doc-JA>
74

BUILDING CLASSES WITH MOOSE

76       Moose makes every attempt to provide as much convenience as possible
77       during class construction/definition, but still stay out of your way if
78       you want it to. Here are a few items to note when building classes with
79       Moose.
80
81       Unless specified with "extends", any class which uses Moose will
82       inherit from Moose::Object.
83
84       Moose will also manage all attributes (including inherited ones) that
85       are defined with "has". And (assuming you call "new", which is
86       inherited from Moose::Object) this includes properly initializing all
87       instance slots, setting defaults where appropriate, and performing any
88       type constraint checking or coercion.
89

PROVIDED METHODS

91       Moose provides a number of methods to all your classes, mostly through
92       the inheritance of Moose::Object. There is however, one exception.
93
94       meta
95           This is a method which provides access to the current class's
96           metaclass.
97

EXPORTED FUNCTIONS

99       Moose will export a number of functions into the class's namespace
100       which may then be used to set up the class. These functions all work
101       directly on the current class.
102
103       extends (@superclasses)
104           This function will set the superclass(es) for the current class.
105
106           This approach is recommended instead of "use base", because "use
107           base" actually "push"es onto the class's @ISA, whereas "extends"
108           will replace it. This is important to ensure that classes which do
109           not have superclasses still properly inherit from Moose::Object.
110
111           Each superclass can be followed by a hash reference with options.
112           Currently, only -version is recognized:
113
114               extends 'My::Parent'      => { -version => 0.01 },
115                       'My::OtherParent' => { -version => 0.03 };
116
117           An exception will be thrown if the version requirements are not
118           satisfied.
119
120       with (@roles)
121           This will apply a given set of @roles to the local class.
122
123           Like with "extends", each specified role can be followed by a hash
124           reference with a -version option:
125
126               with 'My::Role'      => { -version => 0.32 },
127                    'My::Otherrole' => { -version => 0.23 };
128
129           The specified version requirements must be satisfied, otherwise an
130           exception will be thrown.
131
132           If your role takes options or arguments, they can be passed along
133           in the hash reference as well.
134
135       has $name|@$names => %options
136           This will install an attribute of a given $name into the current
137           class. If the first parameter is an array reference, it will create
138           an attribute for every $name in the list. The %options are the same
139           as those provided by Class::MOP::Attribute, in addition to the list
140           below which are provided by Moose (Moose::Meta::Attribute to be
141           more specific):
142
143           is => 'rw'|'ro'
144               The is option accepts either rw (for read/write) or ro (for
145               read only). These will create either a read/write accessor or a
146               read-only accessor respectively, using the same name as the
147               $name of the attribute.
148
149               If you need more control over how your accessors are named, you
150               can use the reader, writer and accessor options inherited from
151               Class::MOP::Attribute, however if you use those, you won't need
152               the is option.
153
154           isa => $type_name
155               The isa option uses Moose's type constraint facilities to set
156               up runtime type checking for this attribute. Moose will perform
157               the checks during class construction, and within any accessors.
158               The $type_name argument must be a string. The string may be
159               either a class name or a type defined using Moose's type
160               definition features. (Refer to Moose::Util::TypeConstraints for
161               information on how to define a new type, and how to retrieve
162               type meta-data).
163
164           coerce => (1|0)
165               This will attempt to use coercion with the supplied type
166               constraint to change the value passed into any accessors or
167               constructors. You must have supplied a type constraint in order
168               for this to work. See Moose::Cookbook::Basics::Recipe5 for an
169               example.
170
171           does => $role_name
172               This will accept the name of a role which the value stored in
173               this attribute is expected to have consumed.
174
175           required => (1|0)
176               This marks the attribute as being required. This means a value
177               must be supplied during class construction, or the attribute
178               must be lazy and have either a default or a builder. Note that
179               c<required> does not say anything about the attribute's value,
180               which can be "undef".
181
182           weak_ref => (1|0)
183               This will tell the class to store the value of this attribute
184               as a weakened reference. If an attribute is a weakened
185               reference, it cannot also be coerced.
186
187           lazy => (1|0)
188               This will tell the class to not create this slot until
189               absolutely necessary.  If an attribute is marked as lazy it
190               must have a default supplied.
191
192           auto_deref => (1|0)
193               This tells the accessor to automatically dereference the value
194               of this attribute when called in list context.  The accessor
195               will still return a reference when called in scalar context.
196               If this behavior isn't desirable, "elements" in
197               Moose::Meta::Attribute::Native::Trait::Array or "elements" in
198               Moose::Meta::Attribute::Native::Trait::Hash may be a better
199               choice.  The auto_deref option is only legal if your isa option
200               is either "ArrayRef" or "HashRef".
201
202           trigger => $code
203               The trigger option is a CODE reference which will be called
204               after the value of the attribute is set. The CODE ref is passed
205               the instance itself, the updated value, and the original value
206               if the attribute was already set.
207
208               You can have a trigger on a read-only attribute.
209
210               NOTE: Triggers will only fire when you assign to the attribute,
211               either in the constructor, or using the writer. Default and
212               built values will not cause the trigger to be fired.
213
214           handles => ARRAY | HASH | REGEXP | ROLE | ROLETYPE | DUCKTYPE |
215           CODE
216               The handles option provides Moose classes with automated
217               delegation features.  This is a pretty complex and powerful
218               option. It accepts many different option formats, each with its
219               own benefits and drawbacks.
220
221               NOTE: The class being delegated to does not need to be a Moose
222               based class, which is why this feature is especially useful
223               when wrapping non-Moose classes.
224
225               All handles option formats share the following traits:
226
227               You cannot override a locally defined method with a delegated
228               method; an exception will be thrown if you try. That is to say,
229               if you define "foo" in your class, you cannot override it with
230               a delegated "foo". This is almost never something you would
231               want to do, and if it is, you should do it by hand and not use
232               Moose.
233
234               You cannot override any of the methods found in Moose::Object,
235               or the "BUILD" and "DEMOLISH" methods. These will not throw an
236               exception, but will silently move on to the next method in the
237               list. My reasoning for this is that you would almost never want
238               to do this, since it usually breaks your class. As with
239               overriding locally defined methods, if you do want to do this,
240               you should do it manually, not with Moose.
241
242               You do not need to have a reader (or accessor) for the
243               attribute in order to delegate to it. Moose will create a means
244               of accessing the value for you, however this will be several
245               times less efficient then if you had given the attribute a
246               reader (or accessor) to use.
247
248               Below is the documentation for each option format:
249
250               "ARRAY"
251                   This is the most common usage for handles. You basically
252                   pass a list of method names to be delegated, and Moose will
253                   install a delegation method for each one.
254
255               "HASH"
256                   This is the second most common usage for handles. Instead
257                   of a list of method names, you pass a HASH ref where each
258                   key is the method name you want installed locally, and its
259                   value is the name of the original method in the class being
260                   delegated to.
261
262                   This can be very useful for recursive classes like trees.
263                   Here is a quick example (soon to be expanded into a
264                   Moose::Cookbook recipe):
265
266                     package Tree;
267                     use Moose;
268
269                     has 'node' => (is => 'rw', isa => 'Any');
270
271                     has 'children' => (
272                         is      => 'ro',
273                         isa     => 'ArrayRef',
274                         default => sub { [] }
275                     );
276
277                     has 'parent' => (
278                         is          => 'rw',
279                         isa         => 'Tree',
280                         weak_ref => 1,
281                         handles     => {
282                             parent_node => 'node',
283                             siblings    => 'children',
284                         }
285                     );
286
287                   In this example, the Tree package gets "parent_node" and
288                   "siblings" methods, which delegate to the "node" and
289                   "children" methods (respectively) of the Tree instance
290                   stored in the "parent" slot.
291
292                   You may also use an array reference to curry arguments to
293                   the original method.
294
295                     has 'thing' => (
296                         ...
297                         handles => { set_foo => [ set => 'foo' ] },
298                     );
299
300                     # $self->set_foo(...) calls $self->thing->set('foo', ...)
301
302                   The first element of the array reference is the original
303                   method name, and the rest is a list of curried arguments.
304
305               "REGEXP"
306                   The regexp option works very similar to the ARRAY option,
307                   except that it builds the list of methods for you. It
308                   starts by collecting all possible methods of the class
309                   being delegated to, then filters that list using the regexp
310                   supplied here.
311
312                   NOTE: An isa option is required when using the regexp
313                   option format. This is so that we can determine (at compile
314                   time) the method list from the class.  Without an isa this
315                   is just not possible.
316
317               "ROLE" or "ROLETYPE"
318                   With the role option, you specify the name of a role or a
319                   role type whose "interface" then becomes the list of
320                   methods to handle. The "interface" can be defined as; the
321                   methods of the role and any required methods of the role.
322                   It should be noted that this does not include any method
323                   modifiers or generated attribute methods (which is
324                   consistent with role composition).
325
326               "DUCKTYPE"
327                   With the duck type option, you pass a duck type object
328                   whose "interface" then becomes the list of methods to
329                   handle. The "interface" can be defined as; the list of
330                   methods passed to "duck_type" to create a duck type object.
331                   For more information on "duck_type" please check
332                   Moose::Util::TypeConstraints.
333
334               "CODE"
335                   This is the option to use when you really want to do
336                   something funky. You should only use it if you really know
337                   what you are doing, as it involves manual metaclass
338                   twiddling.
339
340                   This takes a code reference, which should expect two
341                   arguments. The first is the attribute meta-object this
342                   handles is attached to. The second is the metaclass of the
343                   class being delegated to. It expects you to return a hash
344                   (not a HASH ref) of the methods you want mapped.
345
346           metaclass => $metaclass_name
347               This tells the class to use a custom attribute metaclass for
348               this particular attribute. Custom attribute metaclasses are
349               useful for extending the capabilities of the has keyword: they
350               are the simplest way to extend the MOP, but they are still a
351               fairly advanced topic and too much to cover here, see
352               Moose::Cookbook::Meta::Recipe1 for more information.
353
354               See "Metaclass and Trait Name Resolution" for details on how a
355               metaclass name is resolved to a class name.
356
357           traits => [ @role_names ]
358               This tells Moose to take the list of @role_names and apply them
359               to the attribute meta-object. This is very similar to the
360               metaclass option, but allows you to use more than one extension
361               at a time.
362
363               See "Metaclass and Trait Name Resolution" for details on how a
364               trait name is resolved to a role name.
365
366               Also see Moose::Cookbook::Meta::Recipe3 for a metaclass trait
367               example.
368
369           builder => Str
370               The value of this key is the name of the method that will be
371               called to obtain the value used to initialize the attribute.
372               See the builder option docs in Class::MOP::Attribute
373                and/or Moose::Cookbook::Basics::Recipe8 for more information.
374
375           default => SCALAR | CODE
376               The value of this key is the default value which will
377               initialize the attribute.
378
379               NOTE: If the value is a simple scalar (string or number), then
380               it can be just passed as is.  However, if you wish to
381               initialize it with a HASH or ARRAY ref, then you need to wrap
382               that inside a CODE reference.  See the default option docs in
383               Class::MOP::Attribute for more information.
384
385           clearer => Str
386               Creates a method allowing you to clear the value, see the
387               clearer option docs in Class::MOP::Attribute for more
388               information.
389
390           predicate => Str
391               Creates a method to perform a basic test to see if a value has
392               been set in the attribute, see the predicate option docs in
393               Class::MOP::Attribute for more information.
394
395           lazy_build => (0|1)
396               Automatically define lazy => 1 as well as builder =>
397               "_build_$attr", clearer => "clear_$attr', predicate =>
398               'has_$attr' unless they are already defined.
399
400           initializer => Str
401               This may be a method name (referring to a method on the class
402               with this attribute) or a CODE ref.  The initializer is used to
403               set the attribute value on an instance when the attribute is
404               set during instance initialization (but not when the value is
405               being assigned to). See the initializer option docs in
406               Class::MOP::Attribute for more information.
407
408           documentation => $string
409               An arbitrary string that can be retrieved later by calling
410               "$attr->documentation".
411
412       has +$name => %options
413           This is variation on the normal attribute creator "has" which
414           allows you to clone and extend an attribute from a superclass or
415           from a role. Here is an example of the superclass usage:
416
417             package Foo;
418             use Moose;
419
420             has 'message' => (
421                 is      => 'rw',
422                 isa     => 'Str',
423                 default => 'Hello, I am a Foo'
424             );
425
426             package My::Foo;
427             use Moose;
428
429             extends 'Foo';
430
431             has '+message' => (default => 'Hello I am My::Foo');
432
433           What is happening here is that My::Foo is cloning the "message"
434           attribute from its parent class Foo, retaining the "is => 'rw'" and
435           "isa => 'Str'" characteristics, but changing the value in
436           "default".
437
438           Here is another example, but within the context of a role:
439
440             package Foo::Role;
441             use Moose::Role;
442
443             has 'message' => (
444                 is      => 'rw',
445                 isa     => 'Str',
446                 default => 'Hello, I am a Foo'
447             );
448
449             package My::Foo;
450             use Moose;
451
452             with 'Foo::Role';
453
454             has '+message' => (default => 'Hello I am My::Foo');
455
456           In this case, we are basically taking the attribute which the role
457           supplied and altering it within the bounds of this feature.
458
459           Note that you can only extend an attribute from either a superclass
460           or a role, you cannot extend an attribute in a role that composes
461           over an attribute from another role.
462
463           Aside from where the attributes come from (one from superclass, the
464           other from a role), this feature works exactly the same. This
465           feature is restricted somewhat, so as to try and force at least
466           some sanity into it. You are only allowed to change the following
467           attributes:
468
469           default
470               Change the default value of an attribute.
471
472           coerce
473               Change whether the attribute attempts to coerce a value passed
474               to it.
475
476           required
477               Change if the attribute is required to have a value.
478
479           documentation
480               Change the documentation string associated with the attribute.
481
482           lazy
483               Change if the attribute lazily initializes the slot.
484
485           isa You are allowed to change the type without restriction.
486
487               It is recommended that you use this freedom with caution. We
488               used to only allow for extension only if the type was a subtype
489               of the parent's type, but we felt that was too restrictive and
490               is better left as a policy decision.
491
492           handles
493               You are allowed to add a new "handles" definition, but you are
494               not allowed to change one.
495
496           builder
497               You are allowed to add a new "builder" definition, but you are
498               not allowed to change one.
499
500           metaclass
501               You are allowed to add a new "metaclass" definition, but you
502               are not allowed to change one.
503
504           traits
505               You are allowed to add additional traits to the "traits"
506               definition.  These traits will be composed into the attribute,
507               but preexisting traits are not overridden, or removed.
508
509       before $name|@names|\@names|qr/.../ => sub { ... }
510       after $name|@names|\@names|qr/.../ => sub { ... }
511       around $name|@names|\@names|qr/.../ => sub { ... }
512           These three items are syntactic sugar for the before, after, and
513           around method modifier features that Class::MOP provides. More
514           information on these may be found in Moose::Manual::MethodModifiers
515           and the Class::MOP::Class documentation.
516
517       super
518           The keyword "super" is a no-op when called outside of an "override"
519           method. In the context of an "override" method, it will call the
520           next most appropriate superclass method with the same arguments as
521           the original method.
522
523       override ($name, &sub)
524           An "override" method is a way of explicitly saying "I am overriding
525           this method from my superclass". You can call "super" within this
526           method, and it will work as expected. The same thing can be
527           accomplished with a normal method call and the "SUPER::" pseudo-
528           package; it is really your choice.
529
530       inner
531           The keyword "inner", much like "super", is a no-op outside of the
532           context of an "augment" method. You can think of "inner" as being
533           the inverse of "super"; the details of how "inner" and "augment"
534           work is best described in the Moose::Cookbook::Basics::Recipe6.
535
536       augment ($name, &sub)
537           An "augment" method, is a way of explicitly saying "I am augmenting
538           this method from my superclass". Once again, the details of how
539           "inner" and "augment" work is best described in the
540           Moose::Cookbook::Basics::Recipe6.
541
542       confess
543           This is the "Carp::confess" function, and exported here because I
544           use it all the time.
545
546       blessed
547           This is the "Scalar::Util::blessed" function, it is exported here
548           because I use it all the time. It is highly recommended that this
549           is used instead of "ref" anywhere you need to test for an object's
550           class name.
551

METACLASS

553       When you use Moose, you can specify which metaclass to use:
554
555           use Moose -metaclass => 'My::Meta::Class';
556
557       You can also specify traits which will be applied to your metaclass:
558
559           use Moose -traits => 'My::Trait';
560
561       This is very similar to the attribute traits feature. When you do this,
562       your class's "meta" object will have the specified traits applied to
563       it. See "Metaclass and Trait Name Resolution" for more details.
564
565   Metaclass and Trait Name Resolution
566       By default, when given a trait name, Moose simply tries to load a class
567       of the same name. If such a class does not exist, it then looks for for
568       a class matching Moose::Meta::$type::Custom::Trait::$trait_name. The
569       $type variable here will be one of Attribute or Class, depending on
570       what the trait is being applied to.
571
572       If a class with this long name exists, Moose checks to see if it has
573       the method "register_implementation". This method is expected to return
574       the real class name of the trait. If there is no
575       "register_implementation" method, it will fall back to using
576       Moose::Meta::$type::Custom::Trait::$trait as the trait name.
577
578       The lookup method for metaclasses is the same, except that it looks for
579       a class matching Moose::Meta::$type::Custom::$metaclass_name.
580
581       If all this is confusing, take a look at
582       Moose::Cookbook::Meta::Recipe3, which demonstrates how to create an
583       attribute trait.
584

UNIMPORTING FUNCTIONS

586   unimport
587       Moose offers a way to remove the keywords it exports, through the
588       "unimport" method. You simply have to say "no Moose" at the bottom of
589       your code for this to work. Here is an example:
590
591           package Person;
592           use Moose;
593
594           has 'first_name' => (is => 'rw', isa => 'Str');
595           has 'last_name'  => (is => 'rw', isa => 'Str');
596
597           sub full_name {
598               my $self = shift;
599               $self->first_name . ' ' . $self->last_name
600           }
601
602           no Moose; # keywords are removed from the Person package
603

EXTENDING AND EMBEDDING MOOSE

605       To learn more about extending Moose, we recommend checking out the
606       "Extending" recipes in the Moose::Cookbook, starting with
607       Moose::Cookbook::Extending::Recipe1, which provides an overview of all
608       the different ways you might extend Moose.
609
610   Moose->init_meta(for_class => $class, base_class => $baseclass, metaclass
611       => $metaclass)
612       The "init_meta" method sets up the metaclass object for the class
613       specified by "for_class". This method injects a a "meta" accessor into
614       the class so you can get at this object. It also sets the class's
615       superclass to "base_class", with Moose::Object as the default.
616
617       "init_meta" returns the metaclass object for $class.
618
619       You can specify an alternate metaclass with the "metaclass" option.
620
621       For more detail on this topic, see Moose::Cookbook::Extending::Recipe2.
622
623       This method used to be documented as a function which accepted
624       positional parameters. This calling style will still work for backwards
625       compatibility, but is deprecated.
626
627   import
628       Moose's "import" method supports the Sub::Exporter form of "{into =>
629       $pkg}" and "{into_level => 1}".
630
631       NOTE: Doing this is more or less deprecated. Use Moose::Exporter
632       instead, which lets you stack multiple "Moose.pm"-alike modules sanely.
633       It handles getting the exported functions into the right place for you.
634
635   throw_error
636       An alias for "confess", used by internally by Moose.
637
638   The MooseX:: namespace
639       Generally if you're writing an extension for Moose itself you'll want
640       to put your extension in the "MooseX::" namespace. This namespace is
641       specifically for extensions that make Moose better or different in some
642       fundamental way. It is traditionally not for a package that just
643       happens to use Moose. This namespace follows from the examples of the
644       "LWPx::" and "DBIx::" namespaces that perform the same function for
645       "LWP" and "DBI" respectively.
646

METACLASS COMPATIBILITY AND MOOSE

648       Metaclass compatibility is a thorny subject. You should start by
649       reading the "About Metaclass compatibility" section in the "Class::MOP"
650       docs.
651
652       Moose will attempt to resolve a few cases of metaclass incompatibility
653       when you set the superclasses for a class, in addition to the cases
654       that "Class::MOP" handles.
655
656       Moose tries to determine if the metaclasses only "differ by roles".
657       This means that the parent and child's metaclass share a common
658       ancestor in their respective hierarchies, and that the subclasses under
659       the common ancestor are only different because of role applications.
660       This case is actually fairly common when you mix and match various
661       "MooseX::*" modules, many of which apply roles to the metaclass.
662
663       If the parent and child do differ by roles, Moose replaces the
664       metaclass in the child with a newly created metaclass. This metaclass
665       is a subclass of the parent's metaclass, does all of the roles that the
666       child's metaclass did before being replaced. Effectively, this means
667       the new metaclass does all of the roles done by both the parent's and
668       child's original metaclasses.
669
670       Ultimately, this is all transparent to you except in the case of an
671       unresolvable conflict.
672

CAVEATS

674       ยท   It should be noted that "super" and "inner" cannot be used in the
675           same method. However, they may be combined within the same class
676           hierarchy; see t/014_override_augment_inner_super.t for an example.
677
678           The reason for this is that "super" is only valid within a method
679           with the "override" modifier, and "inner" will never be valid
680           within an "override" method. In fact, "augment" will skip over any
681           "override" methods when searching for its appropriate "inner".
682
683           This might seem like a restriction, but I am of the opinion that
684           keeping these two features separate (yet interoperable) actually
685           makes them easy to use, since their behavior is then easier to
686           predict. Time will tell whether I am right or not (UPDATE: so far
687           so good).
688

GETTING HELP

690       We offer both a mailing list and a very active IRC channel.
691
692       The mailing list is moose@perl.org. You must be subscribed to send a
693       message. To subscribe, send an empty message to
694       moose-subscribe@perl.org
695
696       You can also visit us at "#moose" on <irc://irc.perl.org/#moose> This
697       channel is quite active, and questions at all levels (on Moose-related
698       topics ;) are welcome.
699

ACKNOWLEDGEMENTS

701       I blame Sam Vilain for introducing me to the insanity that is meta-
702       models.
703       I blame Audrey Tang for then encouraging my meta-model habit in #perl6.
704       Without Yuval "nothingmuch" Kogman this module would not be possible,
705       and it certainly wouldn't have this name ;P
706       The basis of the TypeContraints module was Rob Kinyon's idea
707       originally, I just ran with it.
708       Thanks to mst & chansen and the whole #moose posse for all the early
709       ideas/feature-requests/encouragement/bug-finding.
710       Thanks to David "Theory" Wheeler for meta-discussions and spelling
711       fixes.
712

SEE ALSO

714       <http://www.iinteractive.com/moose>
715           This is the official web home of Moose, it contains links to our
716           public git repository as well as links to a number of talks and
717           articles on Moose and Moose related technologies.
718
719       The Moose is flying, a tutorial by Randal Schwartz
720           Part 1 - <http://www.stonehenge.com/merlyn/LinuxMag/col94.html>
721
722           Part 2 - <http://www.stonehenge.com/merlyn/LinuxMag/col95.html>
723
724       Several Moose extension modules in the "MooseX::" namespace.
725           See <http://search.cpan.org/search?query=MooseX::> for extensions.
726
727       Moose stats on ohloh.net - <http://www.ohloh.net/projects/moose>
728
729   Books
730       The Art of the MetaObject Protocol
731           I mention this in the Class::MOP docs too, this book was critical
732           in the development of both modules and is highly recommended.
733
734   Papers
735       http://www.cs.utah.edu/plt/publications/oopsla04-gff.pdf
736       <http://www.cs.utah.edu/plt/publications/oopsla04-gff.pdf>
737           This paper (suggested by lbr on #moose) was what lead to the
738           implementation of the "super"/"override" and "inner"/"augment"
739           features. If you really want to understand them, I suggest you read
740           this.
741

BUGS

743       All complex software has bugs lurking in it, and this module is no
744       exception.
745
746       Please report any bugs to "bug-moose@rt.cpan.org", or through the web
747       interface at <http://rt.cpan.org>.
748
749       You can also discuss feature requests or possible bugs on the Moose
750       mailing list (moose@perl.org) or on IRC at <irc://irc.perl.org/#moose>.
751

FEATURE REQUESTS

753       We are very strict about what features we add to the Moose core,
754       especially the user-visible features. Instead we have made sure that
755       the underlying meta-system of Moose is as extensible as possible so
756       that you can add your own features easily.
757
758       That said, occasionally there is a feature needed in the meta-system to
759       support your planned extension, in which case you should either email
760       the mailing list (moose@perl.org) or join us on IRC at
761       <irc://irc.perl.org/#moose> to discuss. The Moose::Manual::Contributing
762       has more detail about how and when you can contribute.
763

AUTHOR

765       Moose is an open project, there are at this point dozens of people who
766       have contributed, and can contribute. If you have added anything to the
767       Moose project you have a commit bit on this file and can add your name
768       to the list.
769
770   CABAL
771       However there are only a few people with the rights to release a new
772       version of Moose. The Moose Cabal are the people to go to with
773       questions regarding the wider purview of Moose, and help out
774       maintaining not just the code but the community as well.
775
776       Stevan (stevan) Little <stevan@iinteractive.com>
777
778       Jesse (doy) Luehrs <doy at tozt dot net>
779
780       Yuval (nothingmuch) Kogman
781
782       Shawn (sartak) Moore <sartak@bestpractical.com>
783
784       Hans Dieter (confound) Pearcey <hdp@pobox.com>
785
786       Chris (perigrin) Prather
787
788       Florian Ragwitz <rafl@debian.org>
789
790       Dave (autarch) Rolsky <autarch@urth.org>
791
792   OTHER CONTRIBUTORS
793       Aankhen
794
795       Adam (Alias) Kennedy
796
797       Anders (Debolaz) Nor Berle
798
799       Nathan (kolibrie) Gray
800
801       Christian (chansen) Hansen
802
803       Eric (ewilhelm) Wilhelm
804
805       Guillermo (groditi) Roditi
806
807       Jess (castaway) Robinson
808
809       Matt (mst) Trout
810
811       Robert (phaylon) Sedlacek
812
813       Robert (rlb3) Boone
814
815       Scott (konobi) McWhirter
816
817       Shlomi (rindolf) Fish
818
819       Wallace (wreis) Reis
820
821       Jonathan (jrockway) Rockway
822
823       Piotr (dexter) Roszatycki
824
825       Sam (mugwump) Vilain
826
827       Cory (gphat) Watson
828
829       Dylan Hardison (doc fixes)
830
831       ... and many other #moose folks
832
834       Copyright 2006-2010 by Infinity Interactive, Inc.
835
836       <http://www.iinteractive.com>
837
838       This library is free software; you can redistribute it and/or modify it
839       under the same terms as Perl itself.
840
841
842
843perl v5.12.2                      2010-08-28                          Moose(3)
Impressum