---
name: "Sub::HandlesVia::Manual::WithMite"
section: "3pm"
platform: "linux"
package: "perl-sub-handlesvia"
version: "0.053005-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Sub::HandlesVia::Manual::WithMite"
---

# Sub::HandlesVia::Manual::WithMite(3pm)

using Sub::HandlesVia with Mite

## NAME

Sub::HandlesVia::Manual::WithMite - using Sub::HandlesVia with Mite

## SYNOPSIS

```
 package MyApp::Kitchen {
   use MyApp::Mite;

   has food => (
     is          => 'ro',
     isa         => 'ArrayRef[Str]',
     handles_via => 'Array',
     default     => sub { [] },
     handles     => {
       'add_food'    => 'push',
       'find_food'   => 'grep',
     },
   );
 }
```

## MANUAL

Sub::HandlesVia allows you to delegate methods from your class to the values of your objects' attributes.

Conceptually, it allows you to define `"$object->push_number($n)"` to be a shortcut for `"$object->numbers->push($n)"` except that `"$object->numbers"` is an arrayref, so doesn't have methods you can call on it like `"push"`.

Mite 0.009000 and above have built-in `"handles_via"` support. Mite will co-operate with Sub::HandlesVia to implement `"handles_via"` and avoid your project having a Sub::HandlesVia dependency!

### Which Methods Can Be Delegated To?

The `"handles_via"` option indicates which library of methods should be available. Valid values include Array, Blessed, Bool, Code, Counter, Enum, Hash, Number, Scalar, and String.

An arrayref can be provided for `"handles_via"`, though many of the options are conceptually contradictory.

```
 handles_via => [ 'Number', 'Scalar' ]
```

### "use Sub::HandlesVia"

Mite goes to a lot of effort to avoid you needing to `"use Sub::HandlesVia"` directly in your classes and roles, and thus avoid you needing to add it as a dependency.

However, there are edge cases that it might not handle. In these cases, you should be able to `"use SubHandlesVia"` in your code *after* your `"use MyApp::Mite"` and Sub::HandlesVia will intervene and make things work. This adds a dependency on Sub::HandlesVia though.

```
 package MyApp::Kitchen {
   use MyApp::Mite;
   use Sub::HandlesVia;

   has food => (
     is          => 'ro',
     isa         => 'ArrayRef[Str]',
     handles_via => 'Array',
     default     => sub { [] },
     handles     => {
       'add_food'    => 'push',
       'find_food'   => 'grep',
     },
   );
 }
```

Now Mite will no longer generate `"add_food"` and `"find_food"` methods in your *Kitchen.pm.mite.pm* file when you run `"mite compile"`. Instead, Sub::HandlesVia will generate them at run-time when your application runs.

## BUGS

Please report any bugs to \<https://github.com/tobyink/p5-sub-handlesvia/issues\>.

## SEE ALSO

Misc advanced documentation: Sub::HandlesVia::Manual::Advanced.

Sub::HandlesVia, Mite.

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.

## AUTHOR

Toby Inkster \<tobyink@cpan.org\>.

## COPYRIGHT AND LICENCE

This software is copyright (c) 2022 by Toby Inkster.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

## DISCLAIMER OF WARRANTIES

THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
