1MakeMethods::Template::UUsneirveCrosnatlr(i3b)uted PerlMDaokceuMmeetnhtoadtsi:o:nTemplate::Universal(3)
2
3
4

NAME

6       Class::MakeMethods::Template::Universal - Meta-methods for any type of
7       object
8

SYNOPSIS

10         package MyObject;
11         use Class::MakeMethods::Template::Universal (
12           'no_op' => [ 'twiddle' ],
13           'croak' => [ 'fail', { croak_msg => 'Curses!' } ]
14         );
15
16         package main;
17
18         MyObject->twiddle;                    # Does nothing
19         if ( $foiled ) { MyObject->fail() }   # Dies with croak_msg
20

DESCRIPTION

UNIVERSAL META-METHODS

23       The following meta-methods and behaviors are applicable across multiple
24       types of classes and objects.
25
26   Universal:generic
27       This is not a directly-invokable method type, but instead provides code
28       expressions for use in other method-generators.
29
30       You can use any of these features in your meta-method interfaces
31       without explicitly importing them.
32
33       Modifiers
34
35       •   --private
36
37           Causes the method to croak if it is called from outside of the
38           package which originally declared it.
39
40           Note that this protection can currently be circumvented if your
41           class provides the method_init behavior, or another subroutine that
42           calls methods by name.
43
44       •   --protected
45
46           Causes the method to croak if it is called from a package other
47           than the declaring package and its inheritors.
48
49           Note that this protection can currently be circumvented if your
50           class provides the method_init behavior, or another subroutine that
51           calls methods by name.
52
53       •   --public
54
55           Cancels any previous -private or -protected declaration.
56
57       •   --self_closure
58
59           Causes the method to return a function reference which is bound to
60           the arguments provided when it is first called.
61
62           For examples of usage, see the test scripts in t/*closure.t.
63
64       •   --lvalue
65
66           Adds the ":lvalue" attribute to the subroutine declaration.
67
68           For examples of usage, see the test scripts in t/*lvalue.t.
69
70       •   --warn_calls
71
72           For diagnostic purposes, call warn with the object reference,
73           method name, and arguments before executing the body of the method.
74
75       Behaviors
76
77       •   attributes
78
79           Runtime access to method parameters.
80
81       •   no_op -- See below.
82
83       •   croak -- See below.
84
85       •   method_init -- See below.
86
87   no_op
88       For each meta-method, creates a method with an empty body.
89
90         use Class::MakeMethods::Template::Universal (
91           'no_op' => [ 'foo bar baz' ],
92         );
93
94       You might want to create and use such methods to provide hooks for
95       subclass activity.
96
97       No interfaces or parameters supported.
98
99   croak
100       For each meta-method, creates a method which will croak if called.
101
102         use Class::MakeMethods::Template::Universal (
103           'croak' => [ 'foo bar baz' ],
104         );
105
106       This is intended to support the use of abstract methods, that must be
107       overidden in a useful subclass.
108
109       If each subclass is expected to provide an implementation of a given
110       method, using this abstract method will replace the generic error
111       message below with the clearer, more explicit error message that
112       follows it:
113
114         Can't locate object method "foo" via package "My::Subclass"
115         The "foo" method is abstract and can not be called on My::Subclass
116
117       However, note that the existence of this method will be detected by
118       UNIVERSAL::can(), so it is not suitable for use in optional interfaces,
119       for which you may wish to be able to detect whether the method is
120       supported or not.
121
122       The -unsupported and -prohibited interfaces provide alternate error
123       messages, or a custom error message can be provided using the
124       'croak_msg' parameter.
125
126   method_init
127       Creates a method that accepts a hash of key-value pairs, or a reference
128       to hash of such pairs. For each pair, the key is interpreted as the
129       name of a method to call, and the value is the argument to be passed to
130       that method.
131
132       Sample declaration and usage:
133
134         package MyObject;
135         use Class::MakeMethods::Template::Universal (
136           method_init => 'init',
137         );
138         ...
139
140         my $object = MyObject->new()
141         $object->init( foo => 'Foozle', bar => 'Barbados' );
142
143         # Equivalent to:
144         $object->foo('Foozle');
145         $object->bar('Barbados');
146
147       You might want to create and use such methods to allow easy
148       initialization of multiple object or class parameters in a single call.
149
150       Note: including methods of this type will circumvent the protection of
151       "private" and "protected" methods, because it an outside caller can
152       cause an object to call specific methods on itself, bypassing the
153       privacy protection.
154
155   forward_methods
156       Creates a method which delegates to an object provided by another
157       method.
158
159       Example:
160
161         use Class::MakeMethods::Template::Universal
162           forward_methods => [
163                --target=> 'whistle', w,
164               [ 'x', 'y' ], { target=> 'xylophone' },
165               { name=>'z', target=>'zither', target_args=>[123], method_name=>do_zed },
166             ];
167
168       Example: The above defines that method "w" will be handled by the
169       calling "w" on the object returned by "whistle", whilst methods "x" and
170       "y" will be handled by "xylophone", and method "z" will be handled by
171       calling "do_zed" on the object returned by calling zither(123).
172
173       Interfaces:
174
175       forward (default)
176           Calls the method on the target object. If the target object is
177           missing, croaks at runtime with a message saying "Can't forward bar
178           because bar is empty."
179
180       delegate
181           Calls the method on the target object, if present. If the target
182           object is missing, returns nothing.
183
184       Parameters: The following additional parameters are supported:
185
186       target
187           Required. The name of the method that will provide the object that
188           will handle the operation.
189
190       target_args
191           Optional ref to an array of arguments to be passed to the target
192           method.
193
194       method_name
195           The name of the method to call on the handling object. Defaults to
196           the name of the meta-method being created.
197

SEE ALSO

199       See Class::MakeMethods for general information about this distribution.
200
201       See Class::MakeMethods::Template for information about this family of
202       subclasses.
203
204
205
206perl v5.38.0                      2023-07-20MakeMethods::Template::Universal(3)
Impressum