Acme-CPANLists
view release on metacpan or search on metacpan
SYNOPSIS
Acme::CPANLists is yet another way to organize CPAN modules/authors
into various "lists".
SPECIFICATION VERSION
0.090
DESCRIPTION
With the multitude of modules that are available on CPAN, it is
sometimes difficult for a user to choose an appropriate module for a
task or find other modules related in some ways to a module. Various
projects like CPAN Ratings <http://cpanratings.perl.org/> (where users
rate and review a distribution) or MetaCPAN <https://metacpan.org/>
(which has a ++ feature where logged-in users can press a button to ++
a module and the website will tally the number of ++'s a distribution
has) help to some extent. There are also various blog posts by Perl
programmers which review modules, e.g. CPAN Module Reviews by Neil
Bowers <http://neilb.org/reviews/>.
For categorizing CPAN authors, there are also the Acme::CPANAuthors
project, complete with its own website <http://acme.cpanauthors.org/>.
Acme::CPANLists is another way to help. One creates an
Acme::CPANLists::SOMENAME module, and inside it puts lists of CPAN
modules and authors with their descriptions/reviews/ratings. The
creator of the list is free to organize her list in whatever way she
likes.
A related website/online service for "CPAN lists" is coming (when I
eventually get to it :-), or perhaps when I get some help).
CREATING AN ACME::CPANLISTS MODULE
The first step is to decide on a name of the module. It must be under
the Acme::CPANLists:: namespace. Since, unlike in Acme::CPANAuthors, a
module can contain multiple lists, you can just use your CPAN ID for
the module, even if you want to create many lists, for example:
Acme::CPANLists::PERLANCAR. But I recommend that you put each list into
a separate module under your CPAN ID subpackage, for example:
Acme::CPANLists::PERLANCAR::Unbless or
Acme::CPANLists::PERLANCAR::Task::PickingRandomLinesFromFile.
Inside the module, the two main package variables you have to declare
are:
our @Author_Lists = ( ... );
our @Module_Lists = ( ... );
Obviously enough, @Author_Lists contains author lists while
@Module_Lists contains module lists.
Each author/module list is just a hash structure (DefHash). The basic
structure is this:
# an example author list
{
#id => 'GUID', # optional, can be set to ease list identification/referral
summary => 'My favorite modules',
description => <<_,
(Some longer description, in Markdown format)
This is just a list of my favorite modules.
_
entries => [
{...},
...
],
}
# an example module list
{
#id => 'GUID', # optional, can be set to ease list identification/referral
summary => 'My favorite authors',
description => <<'_',
( run in 1.003 second using v1.01-cache-2.11-cpan-0d23b851a93 )