Sub::HandlesVia::Declare(3) User Contributed Perl Documentation Sub::HandlesVia::Declare(3)

Sub::HandlesVia::Declare - declare delegations at compile-time

use Sub::HandlesVia::Declare( $attr, $via => %delegations );

This is roughly equivalent to the following:

use Sub::HandlesVia qw(delegations);

BEGIN {
  delegations(
    attribute    => $attr,
    handles_via  => $via,
    handles      => \%delegations,
  );
};

Except it doesn't import the "delegations" function into your namespace.

Useful for Object::Pad and kind of nice for Class::Tiny. Basically any class builder than does its stuff at compile time.

use Object::Pad;

class Kitchen {
  has @foods;
  use Sub::HandlesVia::Declare '@foods', Array => (
    all_foods => 'all',
    add_food  => 'push',
  );
}

If an attribute begins with a '@' or '%', $via can be omitted.

use Object::Pad;

class Kitchen {
  has @foods;
  use Sub::HandlesVia::Declare '@foods', (
    all_foods => 'all',
    add_food  => 'push',
  );
}

package Kitchen;
use Class::Tiny {
  foods  => sub { [] },
  drinks => sub { [ 'water' ] },
};
use Sub::HandlesVia::Declare 'foods', Array => (
  all_foods  => 'all',
  add_food   => 'push',
);
use Sub::HandlesVia::Declare 'drinks', Array => (
  all_drinks => 'all',
  add_drink  => 'push',
);

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

Sub::HandlesVia.

Toby Inkster <tobyink@cpan.org>.

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.

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.

2024-09-02 perl v5.40.0