X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoo.pm;h=19f53275c3d97f16d1569a3463618dd29c11b3b5;hb=5902c1fcd2ed52f78c6710638be7798fc3c05c8d;hp=3f53398c8edf3374c32c53425d51e4277f023eeb;hpb=673eb4988f20b57235a6e8b9ff7035b95ba98baa;p=gitmo%2FRole-Tiny.git diff --git a/lib/Moo.pm b/lib/Moo.pm index 3f53398..19f5327 100644 --- a/lib/Moo.pm +++ b/lib/Moo.pm @@ -4,7 +4,7 @@ use strictures 1; use Moo::_Utils; use B 'perlstring'; -our $VERSION = '0.009012'; # 0.9.12 +our $VERSION = '0.009013'; # 0.9.13 $VERSION = eval $VERSION; our %MAKERS; @@ -20,7 +20,7 @@ sub import { @{*{_getglob("${target}::ISA")}{ARRAY}} = @_; }; *{_getglob("${target}::with")} = sub { - { local $@; require Moo::Role; } + require Moo::Role; die "Only one role supported at a time by with" if @_ > 1; Moo::Role->apply_role_to_package($target, $_[0]); }; @@ -28,7 +28,7 @@ sub import { *{_getglob("${target}::has")} = sub { my ($name, %spec) = @_; ($MAKERS{$target}{accessor} ||= do { - { local $@; require Method::Generate::Accessor; } + require Method::Generate::Accessor; Method::Generate::Accessor->new })->generate_method($target, $name, \%spec); $class->_constructor_maker_for($target) @@ -36,14 +36,14 @@ sub import { }; foreach my $type (qw(before after around)) { *{_getglob "${target}::${type}"} = sub { - { local $@; require Class::Method::Modifiers; } + require Class::Method::Modifiers; _install_modifier($target, $type, @_); }; } { no strict 'refs'; @{"${target}::ISA"} = do { - { local $@; require Moo::Object; } ('Moo::Object'); + require Moo::Object; ('Moo::Object'); } unless @{"${target}::ISA"}; } } @@ -52,11 +52,8 @@ sub _constructor_maker_for { my ($class, $target, $select_super) = @_; return unless $MAKERS{$target}; $MAKERS{$target}{constructor} ||= do { - { - local $@; - require Method::Generate::Constructor; - require Sub::Defer; - } + require Method::Generate::Constructor; + require Sub::Defer; my ($moo_constructor, $con); if ($select_super && $MAKERS{$select_super}) { @@ -82,7 +79,7 @@ sub _constructor_maker_for { ->new( package => $target, accessor_generator => do { - { local $@; require Method::Generate::Accessor; } + require Method::Generate::Accessor; Method::Generate::Accessor->new; }, construction_string => ( @@ -433,11 +430,28 @@ aware can take advantage of this. =head1 INCOMPATIBILITIES WITH MOOSE You can only compose one role at a time. If your application is large or -complex enough to warrant complex composition, you wanted L. +complex enough to warrant complex composition, you wanted L. Note that +this does not mean you can only compose one role per class - -There is no complex type system. C is verified with a coderef, if you + with 'FirstRole'; + with 'SecondRole'; + +is absolutely fine, there's just currently no equivalent of Moose's + + with 'FirstRole', 'SecondRole'; + +which composes the two roles together, and then applies them. + +There is no built in type system. C is verified with a coderef, if you need complex types, just make a library of coderefs, or better yet, functions -that return quoted subs. +that return quoted subs. L provides a similar API +to L so that you can write + + has days_to_live => (is => 'ro', isa => Int); + +and have it work with both; it is hoped that providing only subrefs as an +API will encourage the use of other type systems as well, since it's +probably the weakest part of Moose design-wise. C is not supported in core since the author considers it to be a bad idea but may be supported by an extension in future. @@ -481,6 +495,23 @@ The nearest L invocation would be: use warnings FATAL => "all"; use MooseX::AttributeShortcuts; +or, if you're inheriting from a non-Moose class, + + package MyClass; + + use Moose; + use MooseX::NonMoose; + use warnings FATAL => "all"; + use MooseX::AttributeShortcuts; + +Finally, Moose requires you to call + + __PACKAGE__->meta->make_immutable; + +at the end of your class to get an inlined (i.e. not horribly slow) +constructor. Moo does it automatically the first time ->new is called +on your class. + =head1 AUTHOR mst - Matt S. Trout (cpan:MSTROUT)