#!perl

use 5.010;
use strict;
use warnings;

use App::PMUtils;
use Perinci::CmdLine::Any -prefer_lite=>1;

our $DATE = '2014-09-16'; # DATE
our $VERSION = '0.28'; # VERSION

our %SPEC;
$SPEC{pmlist} = {
    v => 1.1,
    summary => 'List Perl modules (and PODs, and module prefixes)',
    description => <<'_',

This is basically a CLI interface to `Module::List`, with tab completion.

_
    args => {
        query => {
            schema  => 'str*',
            default => '',
            pos     => 0,
            completion => $App::PMUtils::_complete_module,
        },
        pm => {
            schema  => 'bool',
            default => 1,
        },
        pod => {
            schema  => 'bool',
            default => 1,
        },
        prefix => {
            schema  => 'bool',
            default => 1,
        },
        recursive => {
            schema  => 'bool',
            cmdline_aliases => { recurse => {}, r => {} },
        },
    },
    "cmdline.default_format" => 'text-simple',
};
sub pmlist {
    require Module::List;
    my %args = @_;

    my $query = $args{query} // "";
    $query =~ s!/!::!g; # convenience

    # i wonder why Module::List is not more forgiving
    $query .= "::" unless !length($query) || $query =~ /::\z/;

    my $mods = Module::List::list_modules(
        $query,
        {
            list_prefixes => $args{prefix} // 1,
            list_modules  => $args{pm} // 1,
            list_pod      => $args{pod} // 1,
            recurse       => $args{recursive},
        });
    my @res;
    for (sort keys %$mods) {
        push @res, $_;
    }
    [200, "OK", \@res];
}

Perinci::CmdLine::Any->new(
    url => '/main/pmlist',
)->run;

# ABSTRACT: List Perl modules (and PODs, and module prefixes)
# PODNAME: pmlist

__END__

=pod

=encoding UTF-8

=head1 NAME

pmlist - List Perl modules (and PODs, and module prefixes)

=head1 VERSION

This document describes version 0.28 of pmlist (from Perl distribution App-PMUtils), released on 2014-09-16.

=head1 SYNOPSIS

Basic usage:

 % pmlist Text::

See all other options:

 % pmlist --help

To active bash completion:

 % complete -C pmlist pmlist   ; # can be put in bash startup file e.g. .bashrc
 % pmlist Tex<tab>
 % pmlist text/tabl<tab>       ; # resolve to Text/Table, can resolve case
 % pmlist "Text::Ta<tab>       ; # use quote (' or ") if you want to use :: as separator

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/App-PMUtils>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-App-PMUtils>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=App-PMUtils>

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.

=head1 AUTHOR

perlancar <perlancar@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2014 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.

=cut
