1Mouse(3pm)            User Contributed Perl Documentation           Mouse(3pm)
2
3
4

NAME

6       Mouse - Moose minus the antlers
7

VERSION

9       This document describes Mouse version v2.5.10
10

SYNOPSIS

12           package Point;
13           use Mouse; # automatically turns on strict and warnings
14
15           has 'x' => (is => 'rw', isa => 'Int');
16           has 'y' => (is => 'rw', isa => 'Int');
17
18           sub clear {
19               my($self) = @_;
20               $self->x(0);
21               $self->y(0);
22           }
23
24
25           __PACKAGE__->meta->make_immutable();
26
27           package Point3D;
28           use Mouse;
29
30           extends 'Point';
31
32           has 'z' => (is => 'rw', isa => 'Int');
33
34           after 'clear' => sub {
35               my($self) = @_;
36               $self->z(0);
37           };
38
39           __PACKAGE__->meta->make_immutable();
40

DESCRIPTION

42       Moose is a postmodern object system for Perl5. Moose is wonderful.
43
44       Unfortunately, Moose has a compile-time penalty. Though significant
45       progress has been made over the years, the compile time penalty is a
46       non-starter for some very specific applications. If you are writing a
47       command-line application or CGI script where startup time is essential,
48       you may not be able to use Moose (we recommend that you instead use
49       persistent Perl executing environments like "FastCGI" for the latter,
50       if possible).
51
52       Mouse is a Moose compatible object system, which aims to alleviate this
53       penalty by providing a subset of Moose's functionality.
54
55       We're also going as light on dependencies as possible. Mouse currently
56       has no dependencies except for building/testing modules. Mouse also
57       works without XS, although it has an XS backend to make it much faster.
58
59   Moose Compatibility
60       Compatibility with Moose has been the utmost concern. The sugary
61       interface is highly compatible with Moose. Even the error messages are
62       taken from Moose.  The Mouse code just runs its test suite 4x faster.
63
64       The idea is that, if you need the extra power, you should be able to
65       run "s/Mouse/Moose/g" on your codebase and have nothing break. To that
66       end, we have written Any::Moose which will act as Mouse unless Moose is
67       loaded, in which case it will act as Moose. Since Mouse is a little
68       sloppier than Moose, if you run into weird errors, it would be worth
69       running:
70
71           ANY_MOOSE=Moose perl your-script.pl
72
73       to see if the bug is caused by Mouse. Moose's diagnostics and
74       validation are also better.
75
76       See also Mouse::Spec for compatibility and incompatibility with Moose.
77
78   Mouse Extentions
79       Please don't copy MooseX code to MouseX. If you need extensions, you
80       really should upgrade to Moose. We don't need two parallel sets of
81       extensions!
82
83       If you really must write a Mouse extension, please contact the Moose
84       mailing list or #moose on IRC beforehand.
85

KEYWORDS

87   "$object->meta -> Mouse::Meta::Class"
88       Returns this class' metaclass instance.
89
90   "extends superclasses"
91       Sets this class' superclasses.
92
93   "before (method|methods|regexp) => CodeRef"
94       Installs a "before" method modifier. See "before" in Moose.
95
96   "after (method|methods|regexp) => CodeRef"
97       Installs an "after" method modifier. See "after" in Moose.
98
99   "around (method|methods|regexp) => CodeRef"
100       Installs an "around" method modifier. See "around" in Moose.
101
102   "has (name|names) => parameters"
103       Adds an attribute (or if passed an arrayref of names, multiple
104       attributes) to this class. Options:
105
106       "is => ro|rw|bare"
107           The is option accepts either rw (for read/write), ro (for read
108           only) or bare (for nothing). These will create either a read/write
109           accessor or a read-only accessor respectively, using the same name
110           as the $name of the attribute.
111
112           If you need more control over how your accessors are named, you can
113           use the "reader", "writer" and "accessor" options, however if you
114           use those, you won't need the is option.
115
116       "isa => TypeName | ClassName"
117           Provides type checking in the constructor and accessor. The
118           following types are supported. Any unknown type is taken to be a
119           class check (e.g. "isa => 'DateTime'" would accept only DateTime
120           objects).
121
122               Any Item Bool Undef Defined Value Num Int Str ClassName
123               Ref ScalarRef ArrayRef HashRef CodeRef RegexpRef GlobRef
124               FileHandle Object
125
126           For more documentation on type constraints, see
127           Mouse::Util::TypeConstraints.
128
129       "does => RoleName"
130           This will accept the name of a role which the value stored in this
131           attribute is expected to have consumed.
132
133       "coerce => Bool"
134           This will attempt to use coercion with the supplied type constraint
135           to change the value passed into any accessors or constructors. You
136           must have supplied a type constraint in order for this to work. See
137           Moose::Cookbook::Basics::Recipe5 for an example.
138
139       "required => Bool"
140           Whether this attribute is required to have a value. If the
141           attribute is lazy or has a builder, then providing a value for the
142           attribute in the constructor is optional.
143
144       "init_arg => Str | Undef"
145           Allows you to use a different key name in the constructor.  If
146           undef, the attribute can't be passed to the constructor.
147
148       "default => Value | CodeRef"
149           Sets the default value of the attribute. If the default is a
150           coderef, it will be invoked to get the default value. Due to quirks
151           of Perl, any bare reference is forbidden, you must wrap the
152           reference in a coderef. Otherwise, all instances will share the
153           same reference.
154
155       "lazy => Bool"
156           If specified, the default is calculated on demand instead of in the
157           constructor.
158
159       "predicate => Str"
160           Lets you specify a method name for installing a predicate method,
161           which checks that the attribute has a value. It will not invoke a
162           lazy default or builder method.
163
164       "clearer => Str"
165           Lets you specify a method name for installing a clearer method,
166           which clears the attribute's value from the instance. On the next
167           read, lazy or builder will be invoked.
168
169       "handles => HashRef|ArrayRef|Regexp"
170           Lets you specify methods to delegate to the attribute. ArrayRef
171           forwards the given method names to method calls on the attribute.
172           HashRef maps local method names to remote method names called on
173           the attribute. Other forms of "handles", such as RoleName and
174           CodeRef, are not yet supported.
175
176       "weak_ref => Bool"
177           Lets you automatically weaken any reference stored in the
178           attribute.
179
180           Use of this feature requires Scalar::Util!
181
182       "trigger => CodeRef"
183           Any time the attribute's value is set (either through the accessor
184           or the constructor), the trigger is called on it. The trigger
185           receives as arguments the instance, and the new value.
186
187       "builder => Str"
188           Defines a method name to be called to provide the default value of
189           the attribute. "builder => 'build_foo'" is mostly equivalent to
190           "default => sub { $_[0]->build_foo }".
191
192       "auto_deref => Bool"
193           Allows you to automatically dereference ArrayRef and HashRef
194           attributes in list context. In scalar context, the reference is
195           returned (NOT the list length or bucket status). You must specify
196           an appropriate type constraint to use auto_deref.
197
198       "lazy_build => Bool"
199           Automatically define the following options:
200
201               has $attr => (
202                   # ...
203                   lazy      => 1
204                   builder   => "_build_$attr",
205                   clearer   => "clear_$attr",
206                   predicate => "has_$attr",
207               );
208
209   "confess(message) -> BOOM"
210       "confess" in Carp for your convenience.
211
212   "blessed(value) -> ClassName | undef"
213       "blessed" in Scalar::Util for your convenience.
214

MISC

216   import
217       Importing Mouse will default your class' superclass list to
218       Mouse::Object.  You may use "extends" to replace the superclass list.
219
220   unimport
221       Please unimport Mouse ("no Mouse") so that if someone calls one of the
222       keywords (such as "extends") it will break loudly instead breaking
223       subtly.
224

DEVELOPMENT

226       Here is the repo: <https://github.com/gfx/p5-Mouse>.
227
228       You can build, test, and release it with Minilla.
229
230           cpanm Minilla
231           minil build
232           minil test
233           minil release
234
235       Note that Build.PL and README.md are generated by Minilla, so you
236       should not edit them. Edit minil.toml and lib/Mouse.pm instead.
237

SEE ALSO

239       Mouse::Role
240
241       Mouse::Spec
242
243       Moose
244
245       Moose::Manual
246
247       Moose::Cookbook
248
249       Class::MOP
250
251       Moo
252

AUTHORS

254       Shawn M Moore <sartak at gmail.com>
255
256       Yuval Kogman <nothingmuch at woobling.org>
257
258       tokuhirom
259
260       Yappo
261
262       wu-lee
263
264       Goro Fuji (gfx) <gfuji@cpan.org>
265
266       with plenty of code borrowed from Class::MOP and Moose
267

BUGS

269       All complex software has bugs lurking in it, and this module is no
270       exception.  Please report any bugs to
271       <https://github.com/gfx/p5-Mouse/issues>.
272
274       Copyright (c) 2008-2010 Infinity Interactive, Inc.
275
276       http://www.iinteractive.com/
277
278       This program is free software; you can redistribute it and/or modify it
279       under the same terms as Perl itself.
280
281
282
283perl v5.38.0                      2023-07-21                        Mouse(3pm)
Impressum