NAME Perinci::Class::Base - Base class for your Rinci-metadata-containing classes VERSION This document describes version 0.002 of Perinci::Class::Base (from Perl distribution Perinci-Class-Base), released on 2020-02-16. SYNOPSIS In My/Animal.pm: package My::Animal; use parent 'Perinci::Class::Base'; our %SPEC; $SPEC{speak} = { v => 1.1, is_meth => 1, }; sub speak { die "Please override me!"; } sub new { my ($package, %args) = @_; bless \%args, $package; } 1; In My/Dog.pm: package My::Dog; use parent 'My::Animal'; our %SPEC; # speak's metadata will "inherit" (use metadata from the base class), since we # don't have additionl/modified/removed arguments, etc. sub speak { print "woof\n"; [200]; } $SPEC{play_dead} = { v => 1.1, is_meth => 1, args => { seconds => {schema=>'uint*', default=>5}, }, }; sub play_dead { my ($self, %args) = @_; sleep $; [200]; } 1; in My/Parrot.pm: package My::Parrot; use parent 'My::Animal'; our %SPEC; # we are modifying 'speak' metadata as we add an argument. $SPEC{speak} = { v => 1., is_meth => 1, args => { word => {schema=>'str*'}, }, }; sub speak { my ($self, $word) = @_; print "squawk! $word!\n"; [200]; } 1; To get Rinci metadata for a method: use My::Dog; my $meta = My::Dog->get_rinci_meta_for('speak'); A more convenient syntax to define modified method metadata in My/Dog.pm (the second argument will be merged using Data::ModeMerge): package My::Parrot2; use parent 'My::Animal'; our %SPEC; # we are modifying 'speak' metadata as we add an argument. __PACKAGE__->modify_rinci_meta_for(speak => { args => { word => {schema=>'str*'}, }, }); sub speak { my ($self, $word) = @_; print "squawk! $word!\n"; [200]; } 1; Another example of modifying method metadata: package My::Human; use parent 'My::Animal'; our %SPEC; # we are modifying 'speak' metadata as we remove an argument ('word') and add # another ('words'). __PACKAGE__->modify_rinci_meta_for(speak => { args => { '!word' => undef, words => {schema=>'str*'}, }, }); sub speak { my ($self, $words) = @_; print "$words!\n"; [200]; } 1; DESCRIPTION EXPERIMENTAL, WORK IN PROGRESS. Perinci::Class::Base is a base class that provides some Rinci-related utility routines, mainly to get/modify Rinci metadata in a class settings. FUNCTIONS get_rinci_meta_for Usage: get_rinci_meta_for($name) -> any This function is not exported. Arguments ('*' denotes required arguments): * $name* => *str* Return value: (any) modify_rinci_meta_for Usage: modify_rinci_meta_for($name, $value) -> any This function is not exported. Arguments ('*' denotes required arguments): * $name* => *str* * $value* => *hash* Return value: (any) METHODS get_sub_meta_for modify_sub_meta_for HOMEPAGE Please visit the project's homepage at . SOURCE Source repository is at . BUGS Please report any bugs or feature requests on the bugtracker website When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature. SEE ALSO Rinci AUTHOR perlancar COPYRIGHT AND LICENSE This software is copyright (c) 2020 by perlancar@cpan.org. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.