Step 2: eliminate the need for import and unimport in users of
[gitmo/Moose.git] / lib / Moose.pm
1
2 package Moose;
3
4 use strict;
5 use warnings;
6
7 our $VERSION   = '0.56';
8 our $AUTHORITY = 'cpan:STEVAN';
9
10 use Scalar::Util 'blessed';
11 use Carp         'confess', 'croak', 'cluck';
12
13 use Moose::Exporter;
14
15 use Class::MOP 0.64;
16
17 use Moose::Meta::Class;
18 use Moose::Meta::TypeConstraint;
19 use Moose::Meta::TypeCoercion;
20 use Moose::Meta::Attribute;
21 use Moose::Meta::Instance;
22
23 use Moose::Meta::Role;
24
25 use Moose::Object;
26 use Moose::Util::TypeConstraints;
27 use Moose::Util ();
28
29 sub extends {
30     my $class = shift;
31
32     croak "Must derive at least one class" unless @_;
33
34     my @supers = @_;
35     foreach my $super (@supers) {
36         Class::MOP::load_class($super);
37         croak "You cannot inherit from a Moose Role ($super)"
38             if $super->can('meta')  && 
39                blessed $super->meta &&
40                $super->meta->isa('Moose::Meta::Role')
41     }
42
43
44
45     # this checks the metaclass to make sure
46     # it is correct, sometimes it can get out
47     # of sync when the classes are being built
48     my $meta = $class->meta->_fix_metaclass_incompatability(@supers);
49     $meta->superclasses(@supers);
50 }
51
52 sub with {
53     my $class = shift;
54     Moose::Util::apply_all_roles($class->meta, @_);
55 }
56
57 sub has {
58     my $class = shift;
59     my $name  = shift;
60     croak 'Usage: has \'name\' => ( key => value, ... )' if @_ == 1;
61     my %options = @_;
62     my $attrs = ( ref($name) eq 'ARRAY' ) ? $name : [ ($name) ];
63     $class->meta->add_attribute( $_, %options ) for @$attrs;
64 }
65
66 sub before {
67     my $class = shift;
68     Moose::Util::add_method_modifier($class, 'before', \@_);
69 }
70
71 sub after {
72     my $class = shift;
73     Moose::Util::add_method_modifier($class, 'after', \@_);
74 }
75
76 sub around {
77     my $class = shift;
78     Moose::Util::add_method_modifier($class, 'around', \@_);
79 }
80
81 sub super {
82     return unless our $SUPER_BODY; $SUPER_BODY->(our @SUPER_ARGS);
83 }
84
85 sub override {
86     my $class = shift;
87     my ( $name, $method ) = @_;
88     $class->meta->add_override_method_modifier( $name => $method );
89 }
90
91 sub inner {
92     my $pkg = caller();
93     our ( %INNER_BODY, %INNER_ARGS );
94
95     if ( my $body = $INNER_BODY{$pkg} ) {
96         my @args = @{ $INNER_ARGS{$pkg} };
97         local $INNER_ARGS{$pkg};
98         local $INNER_BODY{$pkg};
99         return $body->(@args);
100     } else {
101         return;
102     }
103 }
104
105 sub augment {
106     my $class = shift;
107     my ( $name, $method ) = @_;
108     $class->meta->add_augment_method_modifier( $name => $method );
109 }
110
111 sub make_immutable {
112     my $class = shift;
113     cluck "The make_immutable keyword has been deprecated, " . 
114           "please go back to __PACKAGE__->meta->make_immutable\n";
115     $class->meta->make_immutable(@_);
116 }
117
118 my $exporter = Moose::Exporter->build_import_methods(
119     with_caller => [
120         qw( extends with has before after around override augment make_immutable )
121     ],
122     as_is => [
123         qw( super inner ),
124         \&Carp::confess,
125         \&Scalar::Util::blessed,
126     ],
127     also => sub { init_meta( shift, 'Moose::Object' ); },
128 );
129
130 # NOTE:
131 # This is for special use by 
132 # some modules and stuff, I 
133 # dont know if it is sane enough
134 # to document actually.
135 # - SL
136 sub __CURRY_EXPORTS_FOR_CLASS__ {
137     my $caller = shift;
138     ($caller ne 'Moose')
139         || croak "_import_into must be called a function, not a method";
140     ($caller->can('meta') && $caller->meta->isa('Class::MOP::Class'))
141         || croak "Cannot call _import_into on a package ($caller) without a metaclass";        
142 #    return map { $_ => $exports{$_}->() } (@_ ? @_ : keys %exports);
143 }
144
145 sub init_meta {
146     my ( $class, $base_class, $metaclass ) = @_;
147     $base_class = 'Moose::Object'      unless defined $base_class;
148     $metaclass  = 'Moose::Meta::Class' unless defined $metaclass;
149
150     confess
151         "The Metaclass $metaclass must be a subclass of Moose::Meta::Class."
152         unless $metaclass->isa('Moose::Meta::Class');
153
154     # make a subtype for each Moose class
155     class_type($class)
156         unless find_type_constraint($class);
157
158     my $meta;
159     if ( $class->can('meta') ) {
160         # NOTE:
161         # this is the case where the metaclass pragma
162         # was used before the 'use Moose' statement to
163         # override a specific class
164         $meta = $class->meta();
165         ( blessed($meta) && $meta->isa('Moose::Meta::Class') )
166           || confess "You already have a &meta function, but it does not return a Moose::Meta::Class";
167     }
168     else {
169         # NOTE:
170         # this is broken currently, we actually need
171         # to allow the possiblity of an inherited
172         # meta, which will not be visible until the
173         # user 'extends' first. This needs to have
174         # more intelligence to it
175         $meta = $metaclass->initialize($class);
176         $meta->add_method(
177             'meta' => sub {
178                 # re-initialize so it inherits properly
179                 $metaclass->initialize( blessed( $_[0] ) || $_[0] );
180             }
181         );
182     }
183
184     # make sure they inherit from Moose::Object
185     $meta->superclasses($base_class)
186       unless $meta->superclasses();
187
188     return $meta;
189 }
190
191 ## make 'em all immutable
192
193 $_->meta->make_immutable(
194     inline_constructor => 0,
195     inline_accessors   => 1,  # these are Class::MOP accessors, so they need inlining
196   )
197   for (
198     'Moose::Meta::Attribute',
199     'Moose::Meta::Class',
200     'Moose::Meta::Instance',
201
202     'Moose::Meta::TypeConstraint',
203     'Moose::Meta::TypeConstraint::Union',
204     'Moose::Meta::TypeConstraint::Parameterized',
205     'Moose::Meta::TypeCoercion',
206
207     'Moose::Meta::Method',
208     'Moose::Meta::Method::Accessor',
209     'Moose::Meta::Method::Constructor',
210     'Moose::Meta::Method::Destructor',
211     'Moose::Meta::Method::Overriden',
212
213     'Moose::Meta::Role',
214     'Moose::Meta::Role::Method',
215     'Moose::Meta::Role::Method::Required',
216   );
217
218 1;
219
220 __END__
221
222 =pod
223
224 =head1 NAME
225
226 Moose - A postmodern object system for Perl 5
227
228 =head1 SYNOPSIS
229
230   package Point;
231   use Moose; # automatically turns on strict and warnings
232
233   has 'x' => (is => 'rw', isa => 'Int');
234   has 'y' => (is => 'rw', isa => 'Int');
235
236   sub clear {
237       my $self = shift;
238       $self->x(0);
239       $self->y(0);
240   }
241
242   package Point3D;
243   use Moose;
244
245   extends 'Point';
246
247   has 'z' => (is => 'rw', isa => 'Int');
248
249   after 'clear' => sub {
250       my $self = shift;
251       $self->z(0);
252   };
253
254 =head1 DESCRIPTION
255
256 Moose is an extension of the Perl 5 object system.
257
258 The main goal of Moose is to make Perl 5 Object Oriented programming
259 easier, more consistent and less tedious. With Moose you can to think
260 more about what you want to do and less about the mechanics of OOP. 
261
262 Additionally, Moose is built on top of L<Class::MOP>, which is a 
263 metaclass system for Perl 5. This means that Moose not only makes 
264 building normal Perl 5 objects better, but it provides the power of 
265 metaclass programming as well. 
266
267 =head2 Moose Extensions
268
269 The C<MooseX::> namespace is the official place to find Moose extensions.
270 These extensions can be found on the CPAN.  The easiest way to find them
271 is to search for them (L<http://search.cpan.org/search?query=MooseX::>),
272 or to examine L<Task::Moose> which aims to keep an up-to-date, easily
273 installable list of Moose extensions.
274
275 =head1 BUILDING CLASSES WITH MOOSE
276
277 Moose makes every attempt to provide as much convenience as possible during
278 class construction/definition, but still stay out of your way if you want it
279 to. Here are a few items to note when building classes with Moose.
280
281 Unless specified with C<extends>, any class which uses Moose will
282 inherit from L<Moose::Object>.
283
284 Moose will also manage all attributes (including inherited ones) that are
285 defined with C<has>. And (assuming you call C<new>, which is inherited from
286 L<Moose::Object>) this includes properly initializing all instance slots,
287 setting defaults where appropriate, and performing any type constraint checking
288 or coercion.
289
290 =head1 PROVIDED METHODS
291
292 Moose provides a number of methods to all your classes, mostly through the 
293 inheritance of L<Moose::Object>. There is however, one exception.
294
295 =over 4
296
297 =item B<meta>
298
299 This is a method which provides access to the current class's metaclass.
300
301 =back
302
303 =head1 EXPORTED FUNCTIONS
304
305 Moose will export a number of functions into the class's namespace which
306 may then be used to set up the class. These functions all work directly
307 on the current class.
308
309 =over 4
310
311 =item B<extends (@superclasses)>
312
313 This function will set the superclass(es) for the current class.
314
315 This approach is recommended instead of C<use base>, because C<use base>
316 actually C<push>es onto the class's C<@ISA>, whereas C<extends> will
317 replace it. This is important to ensure that classes which do not have
318 superclasses still properly inherit from L<Moose::Object>.
319
320 =item B<with (@roles)>
321
322 This will apply a given set of C<@roles> to the local class. 
323
324 =item B<has $name =E<gt> %options>
325
326 This will install an attribute of a given C<$name> into the current class.
327 The C<%options> are the same as those provided by
328 L<Class::MOP::Attribute>, in addition to the list below which are provided
329 by Moose (L<Moose::Meta::Attribute> to be more specific):
330
331 =over 4
332
333 =item I<is =E<gt> 'rw'|'ro'>
334
335 The I<is> option accepts either I<rw> (for read/write) or I<ro> (for read
336 only). These will create either a read/write accessor or a read-only
337 accessor respectively, using the same name as the C<$name> of the attribute.
338
339 If you need more control over how your accessors are named, you can use the
340 I<reader>, I<writer> and I<accessor> options inherited from
341 L<Class::MOP::Attribute>, however if you use those, you won't need the I<is> 
342 option.
343
344 =item I<isa =E<gt> $type_name>
345
346 The I<isa> option uses Moose's type constraint facilities to set up runtime
347 type checking for this attribute. Moose will perform the checks during class
348 construction, and within any accessors. The C<$type_name> argument must be a
349 string. The string may be either a class name or a type defined using
350 Moose's type definition features. (Refer to L<Moose::Util::TypeConstraints>
351 for information on how to define a new type, and how to retrieve type meta-data).
352
353 =item I<coerce =E<gt> (1|0)>
354
355 This will attempt to use coercion with the supplied type constraint to change
356 the value passed into any accessors or constructors. You B<must> have supplied
357 a type constraint in order for this to work. See L<Moose::Cookbook::Basics::Recipe5>
358 for an example.
359
360 =item I<does =E<gt> $role_name>
361
362 This will accept the name of a role which the value stored in this attribute
363 is expected to have consumed.
364
365 =item I<required =E<gt> (1|0)>
366
367 This marks the attribute as being required. This means a I<defined> value must be
368 supplied during class construction, and the attribute may never be set to
369 C<undef> with an accessor.
370
371 =item I<weak_ref =E<gt> (1|0)>
372
373 This will tell the class to store the value of this attribute as a weakened
374 reference. If an attribute is a weakened reference, it B<cannot> also be
375 coerced.
376
377 =item I<lazy =E<gt> (1|0)>
378
379 This will tell the class to not create this slot until absolutely necessary.
380 If an attribute is marked as lazy it B<must> have a default supplied.
381
382 =item I<auto_deref =E<gt> (1|0)>
383
384 This tells the accessor whether to automatically dereference the value returned.
385 This is only legal if your C<isa> option is either C<ArrayRef> or C<HashRef>.
386
387 =item I<trigger =E<gt> $code>
388
389 The I<trigger> option is a CODE reference which will be called after the value of
390 the attribute is set. The CODE ref will be passed the instance itself, the
391 updated value and the attribute meta-object (this is for more advanced fiddling
392 and can typically be ignored). You B<cannot> have a trigger on a read-only
393 attribute.
394
395 =item I<handles =E<gt> ARRAY | HASH | REGEXP | ROLE | CODE>
396
397 The I<handles> option provides Moose classes with automated delegation features.
398 This is a pretty complex and powerful option. It accepts many different option
399 formats, each with its own benefits and drawbacks.
400
401 B<NOTE:> The class being delegated to does not need to be a Moose based class,
402 which is why this feature is especially useful when wrapping non-Moose classes.
403
404 All I<handles> option formats share the following traits:
405
406 You cannot override a locally defined method with a delegated method; an
407 exception will be thrown if you try. That is to say, if you define C<foo> in
408 your class, you cannot override it with a delegated C<foo>. This is almost never
409 something you would want to do, and if it is, you should do it by hand and not
410 use Moose.
411
412 You cannot override any of the methods found in Moose::Object, or the C<BUILD>
413 and C<DEMOLISH> methods. These will not throw an exception, but will silently
414 move on to the next method in the list. My reasoning for this is that you would
415 almost never want to do this, since it usually breaks your class. As with
416 overriding locally defined methods, if you do want to do this, you should do it
417 manually, not with Moose.
418
419 You do not I<need> to have a reader (or accessor) for the attribute in order 
420 to delegate to it. Moose will create a means of accessing the value for you, 
421 however this will be several times B<less> efficient then if you had given 
422 the attribute a reader (or accessor) to use.
423
424 Below is the documentation for each option format:
425
426 =over 4
427
428 =item C<ARRAY>
429
430 This is the most common usage for I<handles>. You basically pass a list of
431 method names to be delegated, and Moose will install a delegation method
432 for each one.
433
434 =item C<HASH>
435
436 This is the second most common usage for I<handles>. Instead of a list of
437 method names, you pass a HASH ref where each key is the method name you
438 want installed locally, and its value is the name of the original method
439 in the class being delegated to.
440
441 This can be very useful for recursive classes like trees. Here is a
442 quick example (soon to be expanded into a Moose::Cookbook recipe):
443
444   package Tree;
445   use Moose;
446
447   has 'node' => (is => 'rw', isa => 'Any');
448
449   has 'children' => (
450       is      => 'ro',
451       isa     => 'ArrayRef',
452       default => sub { [] }
453   );
454
455   has 'parent' => (
456       is          => 'rw',
457       isa         => 'Tree',
458       weak_ref => 1,
459       handles     => {
460           parent_node => 'node',
461           siblings    => 'children',
462       }
463   );
464
465 In this example, the Tree package gets C<parent_node> and C<siblings> methods,
466 which delegate to the C<node> and C<children> methods (respectively) of the Tree
467 instance stored in the C<parent> slot.
468
469 =item C<REGEXP>
470
471 The regexp option works very similar to the ARRAY option, except that it builds
472 the list of methods for you. It starts by collecting all possible methods of the
473 class being delegated to, then filters that list using the regexp supplied here.
474
475 B<NOTE:> An I<isa> option is required when using the regexp option format. This
476 is so that we can determine (at compile time) the method list from the class.
477 Without an I<isa> this is just not possible.
478
479 =item C<ROLE>
480
481 With the role option, you specify the name of a role whose "interface" then
482 becomes the list of methods to handle. The "interface" can be defined as; the
483 methods of the role and any required methods of the role. It should be noted
484 that this does B<not> include any method modifiers or generated attribute
485 methods (which is consistent with role composition).
486
487 =item C<CODE>
488
489 This is the option to use when you really want to do something funky. You should
490 only use it if you really know what you are doing, as it involves manual
491 metaclass twiddling.
492
493 This takes a code reference, which should expect two arguments. The first is the
494 attribute meta-object this I<handles> is attached to. The second is the
495 metaclass of the class being delegated to. It expects you to return a hash (not
496 a HASH ref) of the methods you want mapped.
497
498 =back
499
500 =item I<metaclass =E<gt> $metaclass_name>
501
502 This tells the class to use a custom attribute metaclass for this particular
503 attribute. Custom attribute metaclasses are useful for extending the
504 capabilities of the I<has> keyword: they are the simplest way to extend the MOP,
505 but they are still a fairly advanced topic and too much to cover here, see 
506 L<Moose::Cookbook::Meta::Recipe1> for more information.
507
508 The default behavior here is to just load C<$metaclass_name>; however, we also
509 have a way to alias to a shorter name. This will first look to see if
510 B<Moose::Meta::Attribute::Custom::$metaclass_name> exists. If it does, Moose
511 will then check to see if that has the method C<register_implementation>, which
512 should return the actual name of the custom attribute metaclass. If there is no
513 C<register_implementation> method, it will fall back to using
514 B<Moose::Meta::Attribute::Custom::$metaclass_name> as the metaclass name.
515
516 =item I<traits =E<gt> [ @role_names ]>
517
518 This tells Moose to take the list of C<@role_names> and apply them to the 
519 attribute meta-object. This is very similar to the I<metaclass> option, but 
520 allows you to use more than one extension at a time. This too is an advanced 
521 topic, we don't yet have a cookbook for it though. 
522
523 As with I<metaclass>, the default behavior is to just load C<$role_name>; however, 
524 we also have a way to alias to a shorter name. This will first look to see if
525 B<Moose::Meta::Attribute::Custom::Trait::$role_name> exists. If it does, Moose
526 will then check to see if that has the method C<register_implementation>, which
527 should return the actual name of the custom attribute trait. If there is no
528 C<register_implementation> method, it will fall back to using
529 B<Moose::Meta::Attribute::Custom::Trait::$metaclass_name> as the trait name.
530
531 =back
532
533 =item B<has +$name =E<gt> %options>
534
535 This is variation on the normal attibute creator C<has> which allows you to
536 clone and extend an attribute from a superclass or from a role. Here is an 
537 example of the superclass usage:
538
539   package Foo;
540   use Moose;
541
542   has 'message' => (
543       is      => 'rw',
544       isa     => 'Str',
545       default => 'Hello, I am a Foo'
546   );
547
548   package My::Foo;
549   use Moose;
550
551   extends 'Foo';
552
553   has '+message' => (default => 'Hello I am My::Foo');
554
555 What is happening here is that B<My::Foo> is cloning the C<message> attribute
556 from its parent class B<Foo>, retaining the C<is =E<gt> 'rw'> and C<isa =E<gt>
557 'Str'> characteristics, but changing the value in C<default>.
558
559 Here is another example, but within the context of a role:
560
561   package Foo::Role;
562   use Moose::Role;
563
564   has 'message' => (
565       is      => 'rw',
566       isa     => 'Str',
567       default => 'Hello, I am a Foo'
568   );
569
570   package My::Foo;
571   use Moose;
572
573   with 'Foo::Role';
574
575   has '+message' => (default => 'Hello I am My::Foo');
576
577 In this case, we are basically taking the attribute which the role supplied 
578 and altering it within the bounds of this feature. 
579
580 Aside from where the attributes come from (one from superclass, the other 
581 from a role), this feature works exactly the same. This feature is restricted 
582 somewhat, so as to try and force at least I<some> sanity into it. You are only 
583 allowed to change the following attributes:
584
585 =over 4
586
587 =item I<default>
588
589 Change the default value of an attribute.
590
591 =item I<coerce>
592
593 Change whether the attribute attempts to coerce a value passed to it.
594
595 =item I<required>
596
597 Change if the attribute is required to have a value.
598
599 =item I<documentation>
600
601 Change the documentation string associated with the attribute.
602
603 =item I<lazy>
604
605 Change if the attribute lazily initializes the slot.
606
607 =item I<isa>
608
609 You I<are> allowed to change the type without restriction. 
610
611 It is recommended that you use this freedom with caution. We used to 
612 only allow for extension only if the type was a subtype of the parent's 
613 type, but we felt that was too restrictive and is better left as a 
614 policy descision. 
615
616 =item I<handles>
617
618 You are allowed to B<add> a new C<handles> definition, but you are B<not>
619 allowed to I<change> one.
620
621 =item I<builder>
622
623 You are allowed to B<add> a new C<builder> definition, but you are B<not>
624 allowed to I<change> one.
625
626 =item I<metaclass>
627
628 You are allowed to B<add> a new C<metaclass> definition, but you are
629 B<not> allowed to I<change> one.
630
631 =item I<traits>
632
633 You are allowed to B<add> additional traits to the C<traits> definition.
634 These traits will be composed into the attribute, but pre-existing traits
635 B<are not> overridden, or removed.
636
637 =back
638
639 =item B<before $name|@names =E<gt> sub { ... }>
640
641 =item B<after $name|@names =E<gt> sub { ... }>
642
643 =item B<around $name|@names =E<gt> sub { ... }>
644
645 This three items are syntactic sugar for the before, after, and around method
646 modifier features that L<Class::MOP> provides. More information on these may be
647 found in the L<Class::MOP::Class documentation|Class::MOP::Class/"Method
648 Modifiers"> for now.
649
650 =item B<super>
651
652 The keyword C<super> is a no-op when called outside of an C<override> method. In
653 the context of an C<override> method, it will call the next most appropriate
654 superclass method with the same arguments as the original method.
655
656 =item B<override ($name, &sub)>
657
658 An C<override> method is a way of explicitly saying "I am overriding this
659 method from my superclass". You can call C<super> within this method, and
660 it will work as expected. The same thing I<can> be accomplished with a normal
661 method call and the C<SUPER::> pseudo-package; it is really your choice.
662
663 =item B<inner>
664
665 The keyword C<inner>, much like C<super>, is a no-op outside of the context of
666 an C<augment> method. You can think of C<inner> as being the inverse of
667 C<super>; the details of how C<inner> and C<augment> work is best described in
668 the L<Moose::Cookbook::Basics::Recipe6>.
669
670 =item B<augment ($name, &sub)>
671
672 An C<augment> method, is a way of explicitly saying "I am augmenting this
673 method from my superclass". Once again, the details of how C<inner> and
674 C<augment> work is best described in the L<Moose::Cookbook::Basics::Recipe6>.
675
676 =item B<confess>
677
678 This is the C<Carp::confess> function, and exported here because I use it
679 all the time. 
680
681 =item B<blessed>
682
683 This is the C<Scalar::Util::blessed> function, it is exported here because I
684 use it all the time. It is highly recommended that this is used instead of
685 C<ref> anywhere you need to test for an object's class name.
686
687 =back
688
689 =head1 UNIMPORTING FUNCTIONS
690
691 =head2 B<unimport>
692
693 Moose offers a way to remove the keywords it exports, through the C<unimport>
694 method. You simply have to say C<no Moose> at the bottom of your code for this
695 to work. Here is an example:
696
697     package Person;
698     use Moose;
699
700     has 'first_name' => (is => 'rw', isa => 'Str');
701     has 'last_name'  => (is => 'rw', isa => 'Str');
702
703     sub full_name {
704         my $self = shift;
705         $self->first_name . ' ' . $self->last_name
706     }
707
708     no Moose; # keywords are removed from the Person package
709
710 =head1 EXTENDING AND EMBEDDING MOOSE
711
712 Moose also offers some options for extending or embedding it into your own
713 framework. The basic premise is to have something that sets up your class'
714 metaclass and export the moose declarators (C<has>, C<with>, C<extends>,...).
715 Here is an example:
716
717     package MyFramework;
718     use Moose;
719
720     sub import {
721         my $CALLER = caller();
722
723         strict->import;
724         warnings->import;
725
726         # we should never export to main
727         return if $CALLER eq 'main';
728         Moose::init_meta( $CALLER, 'MyFramework::Base' );
729         Moose->import({into => $CALLER});
730
731         # Do my custom framework stuff
732
733         return 1;
734     }
735
736 =head2 B<import>
737
738 Moose's C<import> method supports the L<Sub::Exporter> form of C<{into =E<gt> $pkg}>
739 and C<{into_level =E<gt> 1}>
740
741 =head2 B<init_meta ($class, $baseclass, $metaclass)>
742
743 Moose does some boot strapping: it creates a metaclass object for your class,
744 and then injects a C<meta> accessor into your class to retrieve it. Then it
745 sets your baseclass to Moose::Object or the value you pass in unless you already
746 have one. This is all done via C<init_meta> which takes the name of your class
747 and optionally a baseclass and a metaclass as arguments.
748
749 For more detail on this topic, see L<Moose::Cookbook::Extending::Recipe2>.
750
751 =head1 CAVEATS
752
753 =over 4
754
755 =item *
756
757 It should be noted that C<super> and C<inner> B<cannot> be used in the same
758 method. However, they may be combined within the same class hierarchy; see
759 F<t/014_override_augment_inner_super.t> for an example.
760
761 The reason for this is that C<super> is only valid within a method
762 with the C<override> modifier, and C<inner> will never be valid within an
763 C<override> method. In fact, C<augment> will skip over any C<override> methods
764 when searching for its appropriate C<inner>.
765
766 This might seem like a restriction, but I am of the opinion that keeping these
767 two features separate (yet interoperable) actually makes them easy to use, since
768 their behavior is then easier to predict. Time will tell whether I am right or
769 not (UPDATE: so far so good).
770
771 =item *
772
773 It is important to note that we currently have no simple way of combining 
774 multiple extended versions of Moose (see L<EXTENDING AND EMBEDDING MOOSE> above), 
775 and that in many cases they will conflict with one another. We are working on 
776 developing a way around this issue, but in the meantime, you have been warned.
777
778 =back
779
780 =head1 JUSTIFICATION
781
782 In case you are still asking yourself "Why do I need this?", then this 
783 section is for you. This used to be part of the main DESCRIPTION, but 
784 I think Moose no longer actually needs justification, so it is included 
785 (read: buried) here for those who are still not convinced.
786
787 =over 4
788
789 =item Another object system!?!?
790
791 Yes, I know there has been an explosion recently of new ways to
792 build objects in Perl 5, most of them based on inside-out objects
793 and other such things. Moose is different because it is not a new
794 object system for Perl 5, but instead an extension of the existing
795 object system.
796
797 Moose is built on top of L<Class::MOP>, which is a metaclass system
798 for Perl 5. This means that Moose not only makes building normal
799 Perl 5 objects better, but it also provides the power of metaclass
800 programming.
801
802 =item Is this for real? Or is this just an experiment?
803
804 Moose is I<based> on the prototypes and experiments I did for the Perl 6
805 meta-model. However, Moose is B<NOT> an experiment/prototype; it is for B<real>.
806
807 =item Is this ready for use in production?
808
809 Yes, I believe that it is.
810
811 Moose has been used successfully in production environemnts by several people
812 and companies (including the one I work for). There are Moose applications
813 which have been in production with little or no issue now for well over two years.
814 I consider it highly stable and we are commited to keeping it stable.
815
816 Of course, in the end, you need to make this call yourself. If you have
817 any questions or concerns, please feel free to email me, or even the list
818 or just stop by #moose and ask away.
819
820 =item Is Moose just Perl 6 in Perl 5?
821
822 No. While Moose is very much inspired by Perl 6, it is not itself Perl 6.
823 Instead, it is an OO system for Perl 5. I built Moose because I was tired of
824 writing the same old boring Perl 5 OO code, and drooling over Perl 6 OO. So
825 instead of switching to Ruby, I wrote Moose :)
826
827 =item Wait, I<post> modern, I thought it was just I<modern>?
828
829 So I was reading Larry Wall's talk from the 1999 Linux World entitled 
830 "Perl, the first postmodern computer language" in which he talks about how 
831 he picked the features for Perl because he thought they were cool and he 
832 threw out the ones that he thought sucked. This got me thinking about how 
833 we have done the same thing in Moose. For Moose, we have "borrowed" features 
834 from Perl 6, CLOS (LISP), Smalltalk, Java, BETA, OCaml, Ruby and more, and 
835 the bits we didn't like (cause they sucked) we tossed aside. So for this 
836 reason (and a few others) I have re-dubbed Moose a I<postmodern> object system.
837
838 Nuff Said.
839
840 =back
841
842 =head1 ACKNOWLEDGEMENTS
843
844 =over 4
845
846 =item I blame Sam Vilain for introducing me to the insanity that is meta-models.
847
848 =item I blame Audrey Tang for then encouraging my meta-model habit in #perl6.
849
850 =item Without Yuval "nothingmuch" Kogman this module would not be possible,
851 and it certainly wouldn't have this name ;P
852
853 =item The basis of the TypeContraints module was Rob Kinyon's idea
854 originally, I just ran with it.
855
856 =item Thanks to mst & chansen and the whole #moose posse for all the
857 early ideas/feature-requests/encouragement/bug-finding.
858
859 =item Thanks to David "Theory" Wheeler for meta-discussions and spelling fixes.
860
861 =back
862
863 =head1 SEE ALSO
864
865 =over 4
866
867 =item L<http://www.iinteractive.com/moose>
868
869 This is the official web home of Moose, it contains links to our public SVN repo
870 as well as links to a number of talks and articles on Moose and Moose related
871 technologies.
872
873 =item L<Moose::Cookbook> - How to cook a Moose
874
875 =item The Moose is flying, a tutorial by Randal Schwartz
876
877 Part 1 - L<http://www.stonehenge.com/merlyn/LinuxMag/col94.html>
878
879 Part 2 - L<http://www.stonehenge.com/merlyn/LinuxMag/col95.html>
880
881 =item L<Class::MOP> documentation
882
883 =item The #moose channel on irc.perl.org
884
885 =item The Moose mailing list - moose@perl.org
886
887 =item Moose stats on ohloh.net - L<http://www.ohloh.net/projects/moose>
888
889 =item Several Moose extension modules in the C<MooseX::> namespace.
890
891 See L<http://search.cpan.org/search?query=MooseX::> for extensions.
892
893 =back
894
895 =head2 Books
896
897 =over 4
898
899 =item The Art of the MetaObject Protocol
900
901 I mention this in the L<Class::MOP> docs too, this book was critical in 
902 the development of both modules and is highly recommended.
903
904 =back
905
906 =head2 Papers
907
908 =over 4
909
910 =item L<http://www.cs.utah.edu/plt/publications/oopsla04-gff.pdf>
911
912 This paper (suggested by lbr on #moose) was what lead to the implementation
913 of the C<super>/C<override> and C<inner>/C<augment> features. If you really
914 want to understand them, I suggest you read this.
915
916 =back
917
918 =head1 BUGS
919
920 All complex software has bugs lurking in it, and this module is no
921 exception. If you find a bug please either email me, or add the bug
922 to cpan-RT.
923
924 =head1 FEATURE REQUESTS
925
926 We are very strict about what features we add to the Moose core, especially 
927 the user-visible features. Instead we have made sure that the underlying 
928 meta-system of Moose is as extensible as possible so that you can add your 
929 own features easily. That said, occasionally there is a feature needed in the 
930 meta-system to support your planned extension, in which case you should 
931 either email the mailing list or join us on irc at #moose to discuss.
932
933 =head1 AUTHOR
934
935 Stevan Little E<lt>stevan@iinteractive.comE<gt>
936
937 B<with contributions from:>
938
939 Aankhen
940
941 Adam (Alias) Kennedy
942
943 Anders (Debolaz) Nor Berle
944
945 Nathan (kolibre) Gray
946
947 Christian (chansen) Hansen
948
949 Hans Dieter (confound) Pearcey
950
951 Eric (ewilhelm) Wilhelm
952
953 Guillermo (groditi) Roditi
954
955 Jess (castaway) Robinson
956
957 Matt (mst) Trout
958
959 Robert (phaylon) Sedlacek
960
961 Robert (rlb3) Boone
962
963 Scott (konobi) McWhirter
964
965 Shlomi (rindolf) Fish
966
967 Yuval (nothingmuch) Kogman
968
969 Chris (perigrin) Prather
970
971 Wallace (wreis) Reis
972
973 Jonathan (jrockway) Rockway
974
975 Piotr (dexter) Roszatycki
976
977 Sam (mugwump) Vilain
978
979 Shawn (sartak) Moore
980
981 ... and many other #moose folks
982
983 =head1 COPYRIGHT AND LICENSE
984
985 Copyright 2006-2008 by Infinity Interactive, Inc.
986
987 L<http://www.iinteractive.com>
988
989 This library is free software; you can redistribute it and/or modify
990 it under the same terms as Perl itself.
991
992 =cut