NAME

Getopt::Long::More - Like Getopt::Long, but with more stuffs

VERSION

This document describes version 0.001 of Getopt::Long::More (from Perl distribution Getopt-Long-More), released on 2016-12-03.

DESCRIPTION

This module is a wrapper and drop-in replacement for Getopt::Long. It provides the same interface as Getopt::Long and, unlike other wrappers like Getopt::Long::Complete it does not change default configuration and all Getopt::Long configuration are supported. In fact, Getopt::Long::More behaves much like Getopt::Long until you start to use optspec object as one or more option handlers.

ABSTRACT

use Getopt::Long::More; # imports GetOptions as well as optspec; you can also
                        # explicitly import Configure, GetOptionsFromArray,
                        # GetOptionsFromString

my %opts;
GetOptions(
    # just like in Getopt::Long
    'foo=s' => \$opts{foo},
    'bar'   => sub { ... },

    # but if you want to specify extra stuffs...
    'baz'   => optspec(
        # at least specify this, for Getopt::Long
        handler => \$opts{baz},

        # specify that this option is required
        required => 1,

        # specify this for default value
        default => 10,

        # specify this if you want nicer usage message
        summary => 'Blah blah blah',

        # specify longer (multiparagraphs) of text for POD, in POD format
        description => <<'_',
Blah blah ...
blah

Blah blah ... blah blah _

        # provide completion from a list of strings
        # completion => [qw/apple apricot banana/],

        # provide more advanced completion routine
        completion => sub {
            require Complete::Util;
            my %args = @_;
            Complete::Util::complete_array_elem(
                word => $args{word},
                array => [ ... ],
            );
        },
    ),
);

OPTSPEC OBJECT

In addition to using scalarref, arrayref, hashref, or coderef as the option handler as Getopt::Long allows, Getopt::Long::More also allows using optspec object as option handler. This allows you to specify more stuffs. Optspec object is created using the optspec function which accepts a list of property name-property value pairs:

'--fruit=s' => optspec(
    handler => \$opts{fruit},
    default => 'apple',
    summary => 'Supply name of fruit to order',
    completion => [qw/apple apricot banana/],
    ...
)

At least the handler property must be specified, as this will be passed to Getopt::Long when parsing options. In addition to that, these other properties are also recognized:

required => bool

Set this to 1 to specify that the option is required.

default => any

Provide default for the option.

summary => str

Provide a short summary message for the option. This is used when generating usage/help message.

description => str

Provide a longer (multiparagraph) text, in POD format. Will be used to generate POD.

completion => array|code

Provide completion routine. Can also be a simple array of strings.

Completion routine will be passed a hash argument, with at least the following keys: word (str, the word to be completed). It is expected to return a completion answer structure (see Complete for mor edetails) which is usually just an array of strings.

FUNCTIONS

Configure

See Getopt::Long documentation.

GetOptionsFromArray

See Getopt::Long documentation.

GetOptionsFromString

See Getopt::Long documentation.

GetOptions

See Getopt::Long documentation.

HelpMessage(@opts_spec) => str

Will print a usage/help message and exit. Sample result:

myapp [options]

Options:
  --fruit=s     Supply name of fruit to order (default: apple)
  --debug       Enable debug mode
  --help|?      Print help message and exit
  --version     Print usage message and exit

VersionMessage

See Getopt::Long documentation.

OptionsPod(@opts_spec) => str

Will generate a POD containing list of options. The text will be taken from the summary and description properties of optspec objects. Example result:

=head1 OPTIONS

=head2 --fruit|f=s

Supply name of fruit to order.

Blah blah blah
blah blah ...

=head2 --debug

=head2 --version

Display program version and exit.

=head2 --help

Display help message and exit.

optspec(%props) => obj

Create optspec object. See "OPTSPEC OBJECT".

COMPLETION

Getopt::Long::Mode supports shell tab completion. To activate tab completion, put your script (e.g. myapp.pl) in PATH and in bash shell type:

% complete -C myapp.pl myapp.pl

You can then complete option names (or option values or command-line arguments too, if you provide completion properties). You can also use shcompgen to activate shell completion; shcompgen supports several shells and various modules.

Tab completion functionality is provided by Complete::Getopt::Long. Note that this module assumes no_ignore_case and does not support things like getopt_compat (starting option with + instead of --).

FAQ

How do I provide completion for command-line arguments:

Use the option spec <>:

GetOptions(
    ...
    '<>' => optspec(
        handler => \&process,
        completion => sub {
            ...
        },
    ),
);

HOMEPAGE

Please visit the project's homepage at https://metacpan.org/release/Getopt-Long-More.

SOURCE

Source repository is at https://github.com/perlancar/perl-Getopt-Long-More.

BUGS

Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Getopt-Long-More

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

Getopt::Long

Other Getopt::Long wrappers that provide extra features: Getopt::Long::Complete, Getopt::Long::Descriptive.

If you want less features instead of more: Getopt::Long::Less, Getopt::Long::EvenLess.

AUTHOR

perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE

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