.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Sub::HandlesVia 3pm" .TH Sub::HandlesVia 3pm "2023-04-09" "perl v5.36.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Sub::HandlesVia \- alternative handles_via implementation .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 4 \& package Kitchen { \& use Moo; \& use Sub::HandlesVia; \& use Types::Standard qw( ArrayRef Str ); \& \& has food => ( \& is => \*(Aqro\*(Aq, \& isa => ArrayRef[Str], \& handles_via => \*(AqArray\*(Aq, \& default => sub { [] }, \& handles => { \& \*(Aqadd_food\*(Aq => \*(Aqpush\*(Aq, \& \*(Aqfind_food\*(Aq => \*(Aqgrep\*(Aq, \& }, \& ); \& } \& \& my $kitchen = Kitchen\->new; \& $kitchen\->add_food(\*(AqBacon\*(Aq); \& $kitchen\->add_food(\*(AqEggs\*(Aq); \& $kitchen\->add_food(\*(AqSausages\*(Aq); \& $kitchen\->add_food(\*(AqBeans\*(Aq); \& \& my @foods = $kitchen\->find_food(sub { /^B/i }); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" If you've used Moose's native attribute traits, or MooX::HandlesVia before, you should have a fairly good idea what this does. .PP Why re-invent the wheel? Well, this is an implementation that should work okay with Moo, Moose, Mouse, and any other \s-1OO\s0 toolkit you throw at it. One ring to rule them all, so to speak. .PP For details of how to use it, see the manual. .IP "Sub::HandlesVia::Manual::WithMoo" 4 .IX Item "Sub::HandlesVia::Manual::WithMoo" How to use Sub::HandlesVia with Moo and Moo::Role. .IP "Sub::HandlesVia::Manual::WithMoose" 4 .IX Item "Sub::HandlesVia::Manual::WithMoose" How to use Sub::HandlesVia with Moose and Moose::Role. .IP "Sub::HandlesVia::Manual::WithMouse" 4 .IX Item "Sub::HandlesVia::Manual::WithMouse" How to use Sub::HandlesVia with Mouse and Mouse::Role. .IP "Sub::HandlesVia::Manual::WithMite" 4 .IX Item "Sub::HandlesVia::Manual::WithMite" How to use Sub::HandlesVia with Mite. .IP "Sub::HandlesVia::Manual::WithClassTiny" 4 .IX Item "Sub::HandlesVia::Manual::WithClassTiny" How to use Sub::HandlesVia with Class::Tiny. .IP "Sub::HandlesVia::Manual::WithObjectPad" 4 .IX Item "Sub::HandlesVia::Manual::WithObjectPad" How to use Sub::HandlesVia with Object::Pad classes. .IP "Sub::HandlesVia::Manual::WithGeneric" 4 .IX Item "Sub::HandlesVia::Manual::WithGeneric" How to use Sub::HandlesVia with other \s-1OO\s0 toolkits, and hand-written Perl classes. .PP Note: as Sub::HandlesVia needs to detect which toolkit you are using, and often needs to detect whether your package is a class or a role, it needs to be loaded \fIafter\fR Moo/Moose/Mouse/etc. Your \f(CW\*(C`use Moo\*(C'\fR or \&\f(CW\*(C`use Moose::Role\*(C'\fR or whatever needs to be \fIbefore\fR your \&\f(CW\*(C`use Sub::HandlesVia\*(C'\fR. .SH "BUGS" .IX Header "BUGS" Please report any bugs to . .PP (There are known bugs for Moose native types that do coercion.) .SH "SEE ALSO" .IX Header "SEE ALSO" Guides for use with different \s-1OO\s0 toolkits: Sub::HandlesVia::Manual::WithMoo, Sub::HandlesVia::Manual::WithMoose, Sub::HandlesVia::Manual::WithMouse, Sub::HandlesVia::Manual::WithMite, Sub::HandlesVia::Manual::WithClassTiny, Sub::HandlesVia::Manual::WithObjectPad, Sub::HandlesVia::Manual::WithGeneric. .PP Documentation for delegatable methods: Sub::HandlesVia::HandlerLibrary::Array, Sub::HandlesVia::HandlerLibrary::Blessed, Sub::HandlesVia::HandlerLibrary::Bool, Sub::HandlesVia::HandlerLibrary::Code, Sub::HandlesVia::HandlerLibrary::Counter, Sub::HandlesVia::HandlerLibrary::Enum, Sub::HandlesVia::HandlerLibrary::Hash, Sub::HandlesVia::HandlerLibrary::Number, Sub::HandlesVia::HandlerLibrary::Scalar, and Sub::HandlesVia::HandlerLibrary::String. .PP Other implementations of the same concept: Moose::Meta::Attribute::Native, MouseX::NativeTraits, and MooX::HandlesVia with Data::Perl. .PP Comparison of those: Sub::HandlesVia::Manual::Comparison .PP Sub::HandlesVia::Declare is a helper for declaring Sub::HandlesVia delegations at compile-time, useful for Object::Pad and (to a lesser extent) Class::Tiny. .SH "AUTHOR" .IX Header "AUTHOR" Toby Inkster . .SH "COPYRIGHT AND LICENCE" .IX Header "COPYRIGHT AND LICENCE" This software is copyright (c) 2020, 2022 by Toby Inkster. .PP This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. .SH "DISCLAIMER OF WARRANTIES" .IX Header "DISCLAIMER OF WARRANTIES" \&\s-1THIS PACKAGE IS PROVIDED \*(L"AS IS\*(R" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.\s0