1Sub::HandlesVia::HandleUrsLeirbrCaornyt:r:iSbturtieSndugb(P:3e:)rHlanDdolceusmVeinat:a:tHiaonndlerLibrary::String(3)
2
3
4
6 Sub::HandlesVia::HandlerLibrary::String - library of string-related
7 methods
8
10 package My::Class {
11 use Moo;
12 use Sub::HandlesVia;
13 use Types::Standard 'Str';
14 has attr => (
15 is => 'rwp',
16 isa => Str,
17 handles_via => 'String',
18 handles => {
19 'my_append' => 'append',
20 'my_chomp' => 'chomp',
21 'my_chop' => 'chop',
22 'my_clear' => 'clear',
23 'my_cmp' => 'cmp',
24 'my_cmpi' => 'cmpi',
25 'my_contains' => 'contains',
26 'my_contains_i' => 'contains_i',
27 'my_ends_with' => 'ends_with',
28 'my_ends_with_i' => 'ends_with_i',
29 'my_eq' => 'eq',
30 'my_eqi' => 'eqi',
31 'my_fc' => 'fc',
32 'my_ge' => 'ge',
33 'my_gei' => 'gei',
34 'my_get' => 'get',
35 'my_gt' => 'gt',
36 'my_gti' => 'gti',
37 'my_inc' => 'inc',
38 'my_lc' => 'lc',
39 'my_le' => 'le',
40 'my_lei' => 'lei',
41 'my_length' => 'length',
42 'my_lt' => 'lt',
43 'my_lti' => 'lti',
44 'my_match' => 'match',
45 'my_match_i' => 'match_i',
46 'my_ne' => 'ne',
47 'my_nei' => 'nei',
48 'my_prepend' => 'prepend',
49 'my_replace' => 'replace',
50 'my_replace_globally' => 'replace_globally',
51 'my_reset' => 'reset',
52 'my_set' => 'set',
53 'my_starts_with' => 'starts_with',
54 'my_starts_with_i' => 'starts_with_i',
55 'my_substr' => 'substr',
56 'my_uc' => 'uc',
57 },
58 );
59 }
60
62 This is a library of methods for Sub::HandlesVia.
63
65 "append( $tail )"
66 Arguments: Str.
67
68 Appends another string to the end of the current string and updates the
69 attribute.
70
71 my $object = My::Class->new( attr => 'foo' );
72 $object->my_append( 'bar' );
73 say $object->attr; ## ==> 'foobar'
74
75 "chomp()"
76 Like "chomp" from perlfunc.
77
78 "chop()"
79 Like "chop" from perlfunc.
80
81 "clear()"
82 Sets the string to the empty string.
83
84 my $object = My::Class->new( attr => 'foo' );
85 $object->my_clear;
86 say $object->attr; ## nothing
87
88 "cmp( $str )"
89 Arguments: Str.
90
91 Returns "$object->attr cmp $str".
92
93 "cmpi( $str )"
94 Arguments: Str.
95
96 Returns "fc($object->attr) cmp fc($str)". Uses "lc" instead of "fc" in
97 versions of Perl older than 5.16.
98
99 "contains( $str )"
100 Arguments: Str.
101
102 Returns true iff the string contains $str.
103
104 "contains_i( $str )"
105 Arguments: Str.
106
107 Returns true iff the string contains $str case-insensitvely.
108
109 "ends_with( $tail )"
110 Arguments: Str.
111
112 Returns true iff the string ends with $tail.
113
114 "ends_with_i( $tail )"
115 Arguments: Str.
116
117 Returns true iff the string ends with $tail case-insensitvely.
118
119 "eq( $str )"
120 Arguments: Str.
121
122 Returns "$object->attr eq $str".
123
124 "eqi( $str )"
125 Arguments: Str.
126
127 Returns "fc($object->attr) eq fc($str)". Uses "lc" instead of "fc" in
128 versions of Perl older than 5.16.
129
130 "fc()"
131 Returns "fc($object->attr)".
132
133 "ge( $str )"
134 Arguments: Str.
135
136 Returns "$object->attr ge $str".
137
138 "gei( $str )"
139 Arguments: Str.
140
141 Returns "fc($object->attr) ge fc($str)". Uses "lc" instead of "fc" in
142 versions of Perl older than 5.16.
143
144 "get()"
145 Gets the current value of the string.
146
147 my $object = My::Class->new( attr => 'foo' );
148 say $object->my_get; ## ==> 'foo'
149
150 "gt( $str )"
151 Arguments: Str.
152
153 Returns "$object->attr gt $str".
154
155 "gti( $str )"
156 Arguments: Str.
157
158 Returns "fc($object->attr) gt fc($str)". Uses "lc" instead of "fc" in
159 versions of Perl older than 5.16.
160
161 "inc()"
162 Performs "++" on the string.
163
164 "lc()"
165 Returns "lc($object->attr)".
166
167 "le( $str )"
168 Arguments: Str.
169
170 Returns "$object->attr le $str".
171
172 "lei( $str )"
173 Arguments: Str.
174
175 Returns "fc($object->attr) le fc($str)". Uses "lc" instead of "fc" in
176 versions of Perl older than 5.16.
177
178 "length()"
179 Like "length" from perlfunc.
180
181 my $object = My::Class->new( attr => 'foo' );
182 say $object->my_length; ## ==> 3
183
184 "lt( $str )"
185 Arguments: Str.
186
187 Returns "$object->attr lt $str".
188
189 "lti( $str )"
190 Arguments: Str.
191
192 Returns "fc($object->attr) lt fc($str)". Uses "lc" instead of "fc" in
193 versions of Perl older than 5.16.
194
195 "match( $regexp )"
196 Arguments: Str|RegexpRef.
197
198 Returns true iff the string matches the regexp.
199
200 my $object = My::Class->new( attr => 'foo' );
201 if ( $object->my_match( '^f..$' ) ) {
202 say 'matched!';
203 }
204
205 "match_i( $regexp )"
206 Arguments: Str|RegexpRef.
207
208 Returns true iff the string matches the regexp case-insensitively.
209
210 my $object = My::Class->new( attr => 'foo' );
211 if ( $object->my_match_i( '^F..$' ) ) {
212 say 'matched!';
213 }
214
215 "ne( $str )"
216 Arguments: Str.
217
218 Returns "$object->attr ne $str".
219
220 "nei( $str )"
221 Arguments: Str.
222
223 Returns "fc($object->attr) ne fc($str)". Uses "lc" instead of "fc" in
224 versions of Perl older than 5.16.
225
226 "prepend( $head )"
227 Arguments: Str.
228
229 Prepends another string to the start of the current string and updates
230 the attribute.
231
232 my $object = My::Class->new( attr => 'foo' );
233 $object->my_prepend( 'bar' );
234 say $object->attr; ## ==> 'barfoo'
235
236 "replace( $regexp, $replacement )"
237 Arguments: Str|RegexpRef, Str|CodeRef.
238
239 Replaces the first regexp match within the string with the replacement
240 string.
241
242 my $object = My::Class->new( attr => 'foo' );
243 $object->my_replace( 'o' => 'a' );
244 say $object->attr; ## ==> 'fao'
245
246 my $object2 = My::Class->new( attr => 'foo' );
247 $object2->my_replace( qr/O/i => sub { return 'e' } );
248 say $object2->attr; ## ==> 'feo'
249
250 "replace_globally( $regexp, $replacement )"
251 Arguments: Str|RegexpRef, Str|CodeRef.
252
253 Replaces the all regexp matches within the string with the replacement
254 string.
255
256 my $object = My::Class->new( attr => 'foo' );
257 $object->my_replace_globally( 'o' => 'a' );
258 say $object->attr; ## ==> 'faa'
259
260 my $object2 = My::Class->new( attr => 'foo' );
261 $object2->my_replace_globally( qr/O/i => sub { return 'e' } );
262 say $object2->attr; ## ==> 'fee'
263
264 "reset()"
265 Resets the attribute to its default value, or an empty string if it has
266 no default.
267
268 "set( $value )"
269 Arguments: Str.
270
271 Sets the string to a new value.
272
273 my $object = My::Class->new( attr => 'foo' );
274 $object->my_set( 'bar' );
275 say $object->attr; ## ==> 'bar'
276
277 "starts_with( $head )"
278 Arguments: Str.
279
280 Returns true iff the string starts with $head.
281
282 "starts_with_i( $head )"
283 Arguments: Str.
284
285 Returns true iff the string starts with $head case-insensitvely.
286
287 "substr( $start, $length?, $replacement? )"
288 Arguments: Int, Optional[Int], Optional[Str].
289
290 Like "substr" from perlfunc, but is not an lvalue.
291
292 "uc()"
293 Returns "uc($object->attr)".
294
296 Using eq for Enum
297 use strict;
298 use warnings;
299
300 package My::Person {
301 use Moo;
302 use Sub::HandlesVia;
303 use Types::Standard qw( Str Enum );
304
305 has name => (
306 is => 'ro',
307 isa => Str,
308 required => 1,
309 );
310
311 has status => (
312 is => 'rwp',
313 isa => Enum[ 'alive', 'dead' ],
314 handles_via => 'String',
315 handles => {
316 is_alive => [ eq => 'alive' ],
317 is_dead => [ eq => 'dead' ],
318 kill => [ set => 'dead' ],
319 },
320 default => 'alive',
321 );
322
323 # Note: method modifiers work on delegated methods
324 #
325 before kill => sub {
326 my $self = shift;
327 warn "overkill" if $self->is_dead;
328 };
329 }
330
331 my $bob = My::Person->new( name => 'Robert' );
332 say $bob->is_alive; ## ==> true
333 say $bob->is_dead; ## ==> false
334 $bob->kill;
335 say $bob->is_alive; ## ==> false
336 say $bob->is_dead; ## ==> true
337
338 See also MooX::Enumeration and MooseX::Enumeration.
339
340 Match with curried regexp
341 use strict;
342 use warnings;
343
344 package My::Component {
345 use Moo;
346 use Sub::HandlesVia;
347 use Types::Standard qw( Str Int );
348
349 has id => (
350 is => 'ro',
351 isa => Int,
352 required => 1,
353 );
354
355 has name => (
356 is => 'ro',
357 isa => Str,
358 required => 1,
359 handles_via => 'String',
360 handles => {
361 name_is_safe_filename => [ match => qr/\A[A-Za-z0-9]+\z/ ],
362 _lc_name => 'lc',
363 },
364 );
365
366 sub config_filename {
367 my $self = shift;
368 if ( $self->name_is_safe_filename ) {
369 return sprintf( '%s.ini', $self->_lc_name );
370 }
371 return sprintf( 'component-%d.ini', $self->id );
372 }
373 }
374
375 my $foo = My::Component->new( id => 42, name => 'Foo' );
376 say $foo->config_filename; ## ==> 'foo.ini'
377
378 my $bar4 = My::Component->new( id => 99, name => 'Bar #4' );
379 say $bar4->config_filename; ## ==> 'component-99.ini'
380
382 Please report any bugs to
383 <https://github.com/tobyink/p5-sub-handlesvia/issues>.
384
386 Sub::HandlesVia.
387
389 Toby Inkster <tobyink@cpan.org>.
390
392 This software is copyright (c) 2020, 2022 by Toby Inkster.
393
394 This is free software; you can redistribute it and/or modify it under
395 the same terms as the Perl 5 programming language system itself.
396
398 THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
399 WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
400 MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
401
402
403
404perl v5.36.0 202S2u-b1:2:-H1a7ndlesVia::HandlerLibrary::String(3)