1Class::Accessor::ClassyU(s3e)r Contributed Perl DocumentaCtliaosns::Accessor::Classy(3)
2
3
4

NAME

6       Class::Accessor::Classy - accessors with minimal inheritance
7

SYNOPSIS

9         package YourPackage;
10
11         use Class::Accessor::Classy;
12           with qw(new);              # with a new() method
13           ro qw(foo);                # read-only
14           rw qw(bar);                # read-write
15           rs baz => \ (my $set_baz); # read-only, plus a secret writer
16
17           # alternatively:
18           my $set_bip = rs 'bip';
19
20           ro_c suitcase => 'red';    # read-only class data
21           rw_c hat      => 'black';  # read-write class data
22           rs_c socks    => \ (my $set_socks) => undef;
23
24           # alternative secret writer syntax
25           my $set_shoes = rs_c shoes => undef;
26
27           # also class read-only:
28           constant seven => 7;
29           constant eight => this->seven + 1;
30         no  Class::Accessor::Classy;
31         # ^-- removes all of the syntax bits from your namespace
32
33         package whatever;
34
35         YourPackage->set_hat(undef);
36         my $obj = YourPackage->new(foo => 4, bar => 2);
37         # NOTE I'm thinking of deprecating the get_foo() usage
38         warn "foo ", $obj->foo;
39         YourPackage->$set_socks("tube");
40

About

42       This module provides an extremely small-footprint accessor/mutator
43       declaration scheme for fast and convenient object attribute setup.  It
44       is intended as a simple and speedy mechanism for preventing hash-key
45       typos rather than a full-blown object system with type checking and so
46       on.
47
48       The accessor methods appear as a hidden parent class of your package
49       and generally try to stay out of the way.  The accessors and mutators
50       generated are of the form foo() and set_foo(), respectively.
51

Frontend

53       Unlike other class-modifying code, this is not designed to be inherited
54       from.  Instead, you simply use it and get an invisible subclass
55       containing your accessors.  If you use the 'no' syntax (to call
56       unimport), you are left with a squeaky-clean namespace.
57
58       After 'use' and before 'no', the following pieces of syntax are
59       available.
60
61   with
62       Add a 'standard' method to your class.
63
64       new
65
66   ro
67       Read-only properties (accessors only.)
68
69         ro qw(foo bar baz);
70
71   rw
72       Define read-write (accessor + mutator) properties.
73
74         rw qw(foo bar baz);
75
76   lv
77       Properties with lvalue accessors.
78
79         lv qw(thing deal stuff);
80
81   ri
82       Immutable properties.  Once set, further calls to the mutator throw
83       errors.
84
85         ri qw(foo bar baz);
86
87   rs
88       Read-only properties with a secret mutator.
89
90         rs foo => \(my $set_foo);
91
92   lo
93       Read-only list properties.  These are stored as an array-ref, but the
94       accessor returns a list.
95
96         lo qw(foo bar baz);
97
98   lw
99       Read-write list properties.  The mutator takes a list.
100
101         lw 'foo';
102
103       This defaults to create foo()|get_foo(), set_foo(), and add_foo()
104       methods.  Other features are possible here, but currently experimental.
105
106   ls
107       List property with a secret mutator.
108
109         ls foo => \(my $set_foo);
110
111   this
112       A shortcut for your classname.  Useful for e.g. defining one constant
113       in terms of another.
114
115         this->some_class_method;
116
117   getter
118       Define a custom getter.
119
120   setter
121       Define a custom setter.
122
123   constant
124       A class constant.
125
126         constant foo => 7;
127
128   ro_c
129       Read-only class method.
130
131   rw_c
132       A read-write class method, with a default.
133
134         rw_c foo => 9;
135
136   rs_c
137       A class method with a secret setter.
138
139         rs_c bar => \(my $set_bar) => 12;
140
141   in
142       Specify the destination package.  You need to set this before defining
143       anything else (but it is usually best to just not set it.)
144
145         in 'why_be_so_secretive';
146
147   aka
148       Add an alias for an existing method.
149
150         aka have_method => 'want_method', 'and_also_want';
151

Utilities

153       This introspection stuff is unreliable -- don't use it.
154
155   find_accessors
156         @attribs = Class::Accessor::Classy->find_accessors($class);
157
158   find_subclasses
159         @classlist = Class::Accessor::Classy->find_subclasses($class);
160

Subclassable

162       Customized subclasses may override these methods to create a new kind
163       of accessor generator.
164
165       NOTE
166           You do not subclass Class::Accessor::Classy to construct your
167           objects.
168
169           If you are just creating MyObject, you are not inheriting any of
170           these methods.
171
172           The rest of this documentation only pertains to you if you are
173           trying to create something like Class::Accessor::Classy::MyWay.
174
175       notation:
176           Read these as: $CAC = 'Class::Accessor::Classy'; (or whatever
177           subclass you're creating.)
178
179   exports
180         my %exports = $CAC->exports;
181
182   import
183         $CAC->import;
184
185   unimport
186         $CAC->unimport;
187
188   create_package
189       Creates and returns the package in which the accessors will live.  Also
190       pushes the created accessor package into the caller's @ISA.
191
192       If it already exists, simply returns the cached value.
193
194         my $package = $CAC->create_package(
195           class => $caller,
196           in    => $package, # optional
197         );
198
199   install_sub
200         $CAC->install_sub($class, $name, $subref, $note);
201
202   annotate
203         $CAC->annotate($class, $name, $note);
204
205   get_notes
206         my %notes = $CAC->get_notes;
207
208   make_standards
209         $CAC->make_standards($class, @list);
210
211   _getter
212       Returns a compiled getter subref corresponding to whether or not the
213       class has a '--get' method.
214
215         $CAC->_getter($class, $item);
216
217   make_getters
218         $CAC->make_getters($class, @list);
219
220   make_lv_getters
221         $CAC->make_lv_getters($class, @list);
222
223   _setter
224       Returns a compiled setter subref corresponding to whether or not the
225       class has a '--set' method.
226
227         $CAC->_setter($class, $item);
228
229   make_setters
230         $CAC->make_setters($class, @list);
231
232   make_immutable
233       Creates immutable (one-time-only) setters.
234
235         CAC->make_immutable($class, @list);
236
237   make_secrets
238         my @names = $CAC->make_secrets($class, @list);
239
240   make_aliases
241       Constructs 'get_' aliases for a @list of accessors.
242
243         $CAC->make_aliases($class, @list);
244
245   make_aka
246       Create a list of alias methods which runtime refer to $realname.
247
248         $CAC->make_aka($where, $realname, @aliases);
249
250   do_eval
251         my $subref = $package->do_eval($string, @checks);
252

List Accessors

254   make_array_method
255         $CAC->make_array_method(
256           class     => $class,
257           item      => $name,
258           functions => [@functions],
259           secret    => $bool,
260         );
261
262       If secret is true, will return the list of names.
263
264   _get_array_subs
265         my %subs = $CAC->_get_array_subs($name);
266

Class Accessors

268   make_class_data
269         $CAC->make_class_data($mode, $class, $key, $value);
270
271       If mode is 'rs', returns the secret setter name.
272

AUTHOR

274       Eric Wilhelm @ <ewilhelm at cpan dot org>
275
276       http://scratchcomputing.com/
277

BUGS

279       If you found this module on CPAN, please report any bugs or feature
280       requests through the web interface at <http://rt.cpan.org>.  I will be
281       notified, and then you'll automatically be notified of progress on your
282       bug as I make changes.
283
284       If you pulled this development version from my /svn/, please contact me
285       directly.
286
288       Copyright (C) 2006-2007 Eric L. Wilhelm, All Rights Reserved.
289

NO WARRANTY

291       Absolutely, positively NO WARRANTY, neither express or implied, is
292       offered with this software.  You use this software at your own risk.
293       In case of loss, no person or entity owes you anything whatseover.  You
294       have been warned.
295

LICENSE

297       This program is free software; you can redistribute it and/or modify it
298       under the same terms as Perl itself.
299
300
301
302perl v5.36.0                      2023-01-20        Class::Accessor::Classy(3)
Impressum