package Perinci; our $VERSION = '0.20'; # VERSION 1; # ABSTRACT: Collection of Perl modules for Rinci and Riap __END__ =pod =head1 NAME Perinci - Collection of Perl modules for Rinci and Riap =head1 VERSION version 0.20 =head1 DESCRIPTION Perinci is a collection of modules for implementing/providing tools pertaining to L<Rinci> and L<Riap>, spread over several distributions for faster incremental releases. These tools include: =over 4 =item * Wrapper L<Perinci::Sub::Wrapper> is the subroutine wrapper which implements/enforces many of the metadata properties, like argument validation (using information in C<args>) as well as offers features like convert argument passing style, automatically envelope function result, etc. It is extensible so you can implement wrapper for your properties too. =item * Riap clients and servers (Perinci::Access::*) L<Perinci::Access::InProcess> is a client/server (well, neither really, since everything is in-process) to access Perl modules/functions using the Riap protocol. It is basically a way to call your modules/functions using URI syntax; it also dictates a bit on how you should write your functions and where to put the metadata, though it provides a lot of flexibility. L<Perinci::Access::HTTP::Client> and L<Perinci::Access::HTTP::Server> is a pair of client/server library to access Perl modules/functions using Riap over HTTP, implementing the L<Riap::HTTP> specification. L<Perinci::Access::TCP::Client> and L<Perinci::Access::TCP::Server> is a pair of client/server library to access Perl modules/functions using Riap over TCP, implementing the L<Riap::TCP> specification. L<Perinci::Access> is a simple wrapper for all Riap clients, you give it a URL/module name/whatever and it will try to select the appropriate Riap client for you. =item * Command-line libraries L<Perinci::CmdLine> is an extensible and featureful command-line library to create command-line programs and API clients. Features include: transparent remote access (thanks to Riap::HTTP), command-line options parsing, --help message, shell tab completion, etc. =item * Documentation tools See CPAN for L<Perinci::To::POD>, L<Perinci::To::Text>, L<Perinci::To::HTML>. These document generators support translations based on L<Locale::Maketext>. =item * Function/metadata generators These are convenient tools to generate common/generic function and/or metadata. For example, L<Perinci::Sub::Gen::AccessTable> can generate accessor function + metadata for table data. See CPAN for more Perinci::Sub::Gen::* modules. =item * Others Samples: L<Perinci::Use>, L<Perinci::Exporter>. See CPAN for more Perinci::* modules. =back To get started, read L<Perinci::Access::InProcess> which will tell you on how to write your functions and where to put the metadata. Or, if you only want to access existing code/metadata, head over to L<Perinci::Access> or L<Perinci::CmdLine>. To declare and implement a new function metadata property, see example in one of the C<Perinci-Sub-property-*> modules, like L<Perinci::Sub::property::timeout>. To declare and implement a new function feature, see example in one of the C<Perinci-Sub-feature-*> modules, like L<Perinci::Sub::feature::foo>. To declare and implement a new function dependency type, see example in one of the C<Perinci-Sub-dep-*> modules, like L<Perinci::Sub::dep::pm>. =head1 STATUS Some modules have been implemented, some (including important ones) have not. See details on CPAN. =head1 FAQ =head2 What does Perinci mean? Perinci is taken from Indonesian word, meaning: to specify, to explain in more detail. It can also be an abbreviation for "B<Pe>rl implementation of B<Rinci>". =head1 SEE ALSO L<Rinci> =head1 AUTHOR Steven Haryanto <stevenharyanto@gmail.com> =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2012 by Steven Haryanto. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut