This commit is contained in:
240
CPAN/Moose/Cookbook/Snack/Keywords.pod
Normal file
240
CPAN/Moose/Cookbook/Snack/Keywords.pod
Normal file
@@ -0,0 +1,240 @@
|
||||
# PODNAME: Moose::Cookbook::Snack::Keywords
|
||||
# ABSTRACT: Restricted "keywords" in Moose
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=encoding UTF-8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Moose::Cookbook::Snack::Keywords - Restricted "keywords" in Moose
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
version 2.2207
|
||||
|
||||
=head1 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.
|
||||
|
||||
=head2 The 'meta' keyword
|
||||
|
||||
C<S<use Moose>> adds a method called C<meta> to your class. If this
|
||||
conflicts with a method or function you are using, you can rename it,
|
||||
or prevent it from being installed entirely. To do this, pass the
|
||||
C<-meta_name> option when you C<S<use Moose>>. For instance:
|
||||
|
||||
# install it under a different name
|
||||
use Moose -meta_name => 'moose_meta';
|
||||
|
||||
# don't install it at all
|
||||
use Moose -meta_name => undef;
|
||||
|
||||
=head2 Moose Keywords
|
||||
|
||||
If you are using L<Moose> or L<Moose::Role> it is best to avoid these
|
||||
keywords:
|
||||
|
||||
=over 4
|
||||
|
||||
=item extends
|
||||
|
||||
=item with
|
||||
|
||||
=item has
|
||||
|
||||
=item before
|
||||
|
||||
=item after
|
||||
|
||||
=item around
|
||||
|
||||
=item super
|
||||
|
||||
=item override
|
||||
|
||||
=item inner
|
||||
|
||||
=item augment
|
||||
|
||||
=item confess
|
||||
|
||||
=item blessed
|
||||
|
||||
=item meta
|
||||
|
||||
=back
|
||||
|
||||
=head2 Moose::Util::TypeConstraints Keywords
|
||||
|
||||
If you are using L<Moose::Util::TypeConstraints> it is best to avoid
|
||||
these keywords:
|
||||
|
||||
=over 4
|
||||
|
||||
=item type
|
||||
|
||||
=item subtype
|
||||
|
||||
=item class_type
|
||||
|
||||
=item role_type
|
||||
|
||||
=item maybe_type
|
||||
|
||||
=item duck_type
|
||||
|
||||
=item as
|
||||
|
||||
=item where
|
||||
|
||||
=item message
|
||||
|
||||
=item inline_as
|
||||
|
||||
=item coerce
|
||||
|
||||
=item from
|
||||
|
||||
=item via
|
||||
|
||||
=item enum
|
||||
|
||||
=item find_type_constraint
|
||||
|
||||
=item register_type_constraint
|
||||
|
||||
=back
|
||||
|
||||
=head2 Avoiding collisions
|
||||
|
||||
=head3 Turning off Moose
|
||||
|
||||
To remove the sugar functions L<Moose> exports, just add C<S<no Moose>>
|
||||
at the bottom of your code:
|
||||
|
||||
package Thing;
|
||||
use Moose;
|
||||
|
||||
# code here
|
||||
|
||||
no Moose;
|
||||
|
||||
This will unexport the sugar functions that L<Moose> originally
|
||||
exported. The same will also work for L<Moose::Role> and
|
||||
L<Moose::Util::TypeConstraints>.
|
||||
|
||||
=head3 Sub::Exporter features
|
||||
|
||||
L<Moose>, L<Moose::Role> and L<Moose::Util::TypeConstraints> all use
|
||||
L<Sub::Exporter> to handle all their exporting needs. This means that
|
||||
all the features that L<Sub::Exporter> provides are also available to
|
||||
them.
|
||||
|
||||
For instance, with L<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 L<Sub::Exporter> docs for more information.
|
||||
|
||||
=head3 namespace::autoclean and namespace::clean
|
||||
|
||||
You can also use L<namespace::autoclean> to clean up your namespace.
|
||||
This will remove all imported functions from your namespace. Note
|
||||
that if you are importing functions that are intended to be used as
|
||||
methods (this includes L<overload>, due to internal implementation
|
||||
details), it will remove these as well.
|
||||
|
||||
Another option is to use L<namespace::clean> directly, but
|
||||
you must be careful not to remove C<meta> when doing so:
|
||||
|
||||
package Foo;
|
||||
use Moose;
|
||||
use namespace::clean -except => 'meta';
|
||||
# ...
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
=over 4
|
||||
|
||||
=item L<Moose>
|
||||
|
||||
=item L<Moose::Role>
|
||||
|
||||
=item L<Moose::Util::TypeConstraints>
|
||||
|
||||
=item L<Sub::Exporter>
|
||||
|
||||
=item L<namespace::autoclean>
|
||||
|
||||
=item L<namespace::clean>
|
||||
|
||||
=back
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
Stevan Little <stevan@cpan.org>
|
||||
|
||||
=item *
|
||||
|
||||
Dave Rolsky <autarch@urth.org>
|
||||
|
||||
=item *
|
||||
|
||||
Jesse Luehrs <doy@cpan.org>
|
||||
|
||||
=item *
|
||||
|
||||
Shawn M Moore <sartak@cpan.org>
|
||||
|
||||
=item *
|
||||
|
||||
יובל קוג'מן (Yuval Kogman) <nothingmuch@woobling.org>
|
||||
|
||||
=item *
|
||||
|
||||
Karen Etheridge <ether@cpan.org>
|
||||
|
||||
=item *
|
||||
|
||||
Florian Ragwitz <rafl@debian.org>
|
||||
|
||||
=item *
|
||||
|
||||
Hans Dieter Pearcey <hdp@cpan.org>
|
||||
|
||||
=item *
|
||||
|
||||
Chris Prather <chris@prather.org>
|
||||
|
||||
=item *
|
||||
|
||||
Matt S Trout <mstrout@cpan.org>
|
||||
|
||||
=back
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
This software is copyright (c) 2006 by Infinity Interactive, Inc.
|
||||
|
||||
This is free software; you can redistribute it and/or modify it under
|
||||
the same terms as the Perl 5 programming language system itself.
|
||||
|
||||
=cut
|
||||
130
CPAN/Moose/Cookbook/Snack/Types.pod
Normal file
130
CPAN/Moose/Cookbook/Snack/Types.pod
Normal file
@@ -0,0 +1,130 @@
|
||||
# PODNAME: Moose::Cookbook::Snack::Types
|
||||
# ABSTRACT: Snippets of code for using Types and Type Constraints
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=encoding UTF-8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Moose::Cookbook::Snack::Types - Snippets of code for using Types and Type Constraints
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
version 2.2207
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
package Point;
|
||||
use Moose;
|
||||
|
||||
has 'x' => ( isa => 'Int', is => 'ro' );
|
||||
has 'y' => ( isa => 'Int', is => 'rw' );
|
||||
|
||||
package main;
|
||||
use Try::Tiny;
|
||||
|
||||
my $point = try {
|
||||
Point->new( x => 'fifty', y => 'forty' );
|
||||
}
|
||||
catch {
|
||||
print "Oops: $_";
|
||||
};
|
||||
|
||||
my $point;
|
||||
my $xval = 'forty-two';
|
||||
my $xattribute = Point->meta->find_attribute_by_name('x');
|
||||
my $xtype_constraint = $xattribute->type_constraint;
|
||||
|
||||
if ( $xtype_constraint->check($xval) ) {
|
||||
$point = Point->new( x => $xval, y => 0 );
|
||||
}
|
||||
else {
|
||||
print "Value: $xval is not an " . $xtype_constraint->name . "\n";
|
||||
}
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This is the Point example from
|
||||
L<Moose::Cookbook::Basics::Point_AttributesAndSubclassing> with type checking
|
||||
added.
|
||||
|
||||
If we try to assign a string value to an attribute that is an C<Int>,
|
||||
Moose will die with an explicit error message. The error will include
|
||||
the attribute name, as well as the type constraint name and the value
|
||||
which failed the constraint check.
|
||||
|
||||
We use L<Try::Tiny> to catch this error message.
|
||||
|
||||
Later, we get the L<Moose::Meta::TypeConstraint> object from a
|
||||
L<Moose::Meta::Attribute> and use the L<Moose::Meta::TypeConstraint>
|
||||
to check a value directly.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
=over 4
|
||||
|
||||
=item L<Moose::Cookbook::Basics::Point_AttributesAndSubclassing>
|
||||
|
||||
=item L<Moose::Util::TypeConstraints>
|
||||
|
||||
=item L<Moose::Meta::Attribute>
|
||||
|
||||
=back
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
Stevan Little <stevan@cpan.org>
|
||||
|
||||
=item *
|
||||
|
||||
Dave Rolsky <autarch@urth.org>
|
||||
|
||||
=item *
|
||||
|
||||
Jesse Luehrs <doy@cpan.org>
|
||||
|
||||
=item *
|
||||
|
||||
Shawn M Moore <sartak@cpan.org>
|
||||
|
||||
=item *
|
||||
|
||||
יובל קוג'מן (Yuval Kogman) <nothingmuch@woobling.org>
|
||||
|
||||
=item *
|
||||
|
||||
Karen Etheridge <ether@cpan.org>
|
||||
|
||||
=item *
|
||||
|
||||
Florian Ragwitz <rafl@debian.org>
|
||||
|
||||
=item *
|
||||
|
||||
Hans Dieter Pearcey <hdp@cpan.org>
|
||||
|
||||
=item *
|
||||
|
||||
Chris Prather <chris@prather.org>
|
||||
|
||||
=item *
|
||||
|
||||
Matt S Trout <mstrout@cpan.org>
|
||||
|
||||
=back
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
This software is copyright (c) 2006 by Infinity Interactive, Inc.
|
||||
|
||||
This is free software; you can redistribute it and/or modify it under
|
||||
the same terms as the Perl 5 programming language system itself.
|
||||
|
||||
=cut
|
||||
Reference in New Issue
Block a user