What are ways to use this Acme::CPANModules module? Aside from reading this Acme::CPANModules module's POD documentation, you can install all the listed modules (entries) using cpanm-cpanmodules script (from App::cpanm::cpanmodules distribution): % cpanm-cpanmodules -n ).$ac_name.q( Alternatively you can use the cpanmodules CLI (from App::cpanmodules distribution): % cpanmodules ls-entries ).$ac_name.q( | cpanm -n or Acme::CM::Get: % perl -MAcme::CM::Get=).$ac_name.q( -E'say $_->{module} for @{ $LIST->{entries} }' | cpanm -n or directly: % perl -MAcme::CPANModules::).$ac_name.q( -E'say $_->{module} for @{ $Acme::CPANModules::).$ac_name.q(::LIST->{entries} }' | cpanm -n ); if ($has_benchmark) { push @pod, q(This Acme::CPANModules module contains benchmark instructions. You can run a benchmark for some/all the modules listed in this Acme::CPANModules module using the bencher CLI (from Bencher distribution): % bencher --cpanmodules-module ).$ac_name.q( ); } push @pod, q(This Acme::CPANModules module also helps L produce a more meaningful result for C command when it comes to finding related modules for the modules listed in this Acme::CPANModules module. See L for more details on how "related modules" are found. ); $self->add_text_to_section( $document, join("", @pod), 'FAQ', { after_section => ['COMPLETION', 'DESCRIPTION'], before_section => ['CONFIGURATION FILE', 'CONFIGURATION FILES'], ignore => 1, }); } $self->log(["Generated POD for '%s'", $filename]); } sub _process_bundle_module { no strict 'refs'; ## no critic: TestingAndDebugging::ProhibitNoStrict my ($self, $document, $input, $package) = @_; my $filename = $input->{filename}; # XXX handle dynamically generated module (if there is such thing in the # future) local @INC = ("lib", @INC); # collect modules list my %acs; { require Module::List; my $res; { local @INC = ("lib"); $res = Module::List::list_modules( "Acme::CPANModules::", {recurse=>1, list_modules=>1}); } for my $mod (keys %$res) { my $ac_name = $mod; $ac_name =~ s/^Acme::CPANModules:://; local @INC = ("lib", @INC); my $mod_pm = $mod; $mod_pm =~ s!::!/!g; $mod_pm .= ".pm"; require $mod_pm; $acs{$ac_name} = ${"$mod\::LIST"}; } } # add POD section: ACME::CPANMODULES MODULES { last unless keys %acs; require Markdown::To::POD; my @pod; push @pod, "The following Acme::CPANModules::* modules are included in this distribution:\n\n"; push @pod, "=over\n\n"; for my $name (sort keys %acs) { my $list = $acs{$name}; push @pod, "=item * L<$name|Acme::CPANModules::$name>\n\n"; if (defined $list->{summary}) { require String::PodQuote; push @pod, String::PodQuote::pod_quote($list->{summary}), ".\n\n"; } if ($list->{description}) { my $pod = Markdown::To::POD::markdown_to_pod( $list->{description}); push @pod, $pod, "\n\n"; } } push @pod, "=back\n\n"; $self->add_text_to_section( $document, join("", @pod), 'ACME::CPANMODULES MODULES', {after_section => ['DESCRIPTION']}, ); } # add POD section: SEE ALSO { # XXX don't add if current See Also already mentions it my @pod = ( "L - the specification\n\n", "L - the main CLI\n\n", "L - other CLIs\n\n", ); $self->add_text_to_section( $document, join('', @pod), 'SEE ALSO', {after_section => ['DESCRIPTION']}, ); } $self->log(["Generated POD for '%s'", $filename]); } sub weave_section { my ($self, $document, $input) = @_; my $filename = $input->{filename}; return unless $filename =~ m!^lib/(.+)\.pm$!; my $package = $1; $package =~ s!/!::!g; if ($package =~ /\AAcme::CPANModules::/) { $self->_process_module($document, $input, $package); } elsif ($package =~ /\AAcme::CPANModulesBundle::/) { $self->_process_bundle_module($document, $input, $package); } } 1; # ABSTRACT: Plugin to use when building Acme::CPANModules::* distribution __END__ NAME Pod::Weaver::Plugin::Acme::CPANModules - Plugin to use when building Acme::CPANModules::* distribution VERSION This document describes version 0.013 of Pod::Weaver::Plugin::Acme::CPANModules (from Perl distribution Pod-Weaver-Plugin-Acme-CPANModules), released on 2022-10-17. SYNOPSIS In your weaver.ini: [-Acme::CPANModules] ;entry_description_code = "Website URL: <" . $_->{website_url} . ">\n\n"; DESCRIPTION This plugin is used when building Acme::CPANModules::* distributions. It currently does the following: For Acme/CPANModulesBundle/*.pm files: * List Acme::CPANModules::* modules included in the distribution For Acme/CPANModules/*.pm files: * Create "ACME::CPANMODULES ENTRIES" POD section from the list * Create "ACME::CPANMODULES FEATURE COMPARISON MATRIX" POD section from the list * Mention some modules in See Also section e.g. Acme::CPANModules (the convention/standard), cpanmodules (the CLI tool), etc. CONFIGURATION entry_description_code Optional. Perl code to produce the description POD. If not specified, will use default template for the description POD, i.e. entry's "description" property, plus "rating", "alternative_modules" if available. See Pod::From::Acme::CPANModules for more details. additional_props Optional. Also passed to "Pod::From::Acme::CPANModules". HOMEPAGE Please visit the project's homepage at . SOURCE Source repository is at . SEE ALSO Acme::CPANModules Dist::Zilla::Plugin::Acme::CPANModules AUTHOR perlancar CONTRIBUTING To contribute, you can send patches by email/via RT, or send pull requests on GitHub. Most of the time, you don't need to build the distribution yourself. You can simply modify the code, then test via: % prove -l If you want to build the distribution (e.g. to try to install it locally on your system), you can install Dist::Zilla, Dist::Zilla::PluginBundle::Author::PERLANCAR, Pod::Weaver::PluginBundle::Author::PERLANCAR, and sometimes one or two other Dist::Zilla- and/or Pod::Weaver plugins. Any additional steps required beyond that are considered a bug and can be reported to me. COPYRIGHT AND LICENSE This software is copyright (c) 2022, 2021, 2020, 2019, 2018 by perlancar . This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. 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.