The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Getopt::Compact - getopt processing in a compact statement with both long and short options, and usage functionality.

SYNOPSIS

inside foobar.pl:

    use Getopt::Compact;

    my $opt = new Getopt::Compact
        (name => 'foobar program', version => '1.0',
         modes => [qw(verbose test debug)],
         struct =>
         [[[qw(w wibble)], qq(specify a wibble parameter), ':s'],
          [[qw(f foobar)], qq(apply foobar algorithm)],
          [[qw(j joobies)], qq(jooby integer list), '=i', \@joobs],
         ]
        )->opts;

    print "applying foobar algorithm\n" if $opt->{foobar};
    print "joobs: @joobs\n" if @joobs;

running the command './foobar.pl -x' results in the following output:

    Unknown option: x
    foobar program v1.0
    usage: foobar.pl [options]
    options
    -h, --help      This help message
    -v, --verbose   Verbose mode
    -n, --test      Test mode
    -d, --debug     Debug mode
    -w, --wibble    Specify a wibble parameter
    -f, --foobar    Apply foobar algorithm
    -j, --joobies   Jooby integer list

DESCRIPTION

This is yet another Getopt related module. Getopt::Compact is geared towards compactly and yet quite powerfully describing an option syntax. Options can be parsed, returned as a hashref of values, and/or displayed as a usage string. Options can be retrieved in a single statement by instantiating a Getopt::Compact object and calling the opts() method (see SYNOPSIS).

PUBLIC METHODS

new()
    my $go = new Getopt::Compact(%options)

Instantiates a Getopt::Compact object. This will parse the command line arguments and store them for later retrieval (via the opts() method). On error a usage string is printed and exit() is called, unless you have set the 'usage' option to false.

The following constructor options are recognised:

name

    The name of the program. This is printed at the start of the usage string.

cmd

    The command used to execute this program. Defaults to $0. This will be printed as part of the usage string.

version

    Program version. Can be an RCS Version string, or any other string. Displayed in usage information.

usage

    'usage' is set to true by default. Set it to false (0) to disable the default behaviour of automatically printing a usage string and exiting when there are parse errors or the --help option is given. When set to true a help option (-h or --help) is automatically prepended to the list of available options.

args

    A string describing mandatory arguments to display in the usage string. eg:

    print new Getopt::Compact (args => 'foo', cmd => 'bar.pl)->usage;

    displays:

    usage: bar.pl [options] foo

modes

    This is a shortcut for defining boolean mode options, such as verbose and test modes. Set it to an arrayref of mode names, eg [qw(verbose test)]. The following statements are equivalent:

        my $go = new Getopt::Compact
            (struct => [[[qw(v verbose)], qw(verbose mode)],
                        [[qw(n test)],    qw(test mode)],
                        [[qw(d debug)],   qw(debug mode)],
                        [[qw(f foobar)],  qw(activate foobar)],
                       ]);

    and

        my $go = new Getopt::Compact
            (modes => [qw(verbose test debug)],
             struct => [[[qw(f foobar)], qq(activate foobar)]]);

    modes will be prepended to options defined via the 'struct' option.

struct

    This is where most of the option configuration is done. The format for a struct option is an arrayref of arrayrefs in the following form ([] denotes an arrayref):

    struct => [arrayref, arrayref]

    arrayref is of the form (only optref is required):

    [optref, description, argument specification, destination]

    optref is of the form:

    [qw(x yyyyy)] where x is the short (single character) option and yyyyy is the long option.

    The 'argument specification' is passed directly to Getopt::Long, so any argument specification recognised by Getopt::Long should also work here. Some argument specifications are:

        =s  Required string argument
        :s  Optional string argument
        =i  Required integer argument
        +   Value incrementing

    Refer to Getopt::Long documentation for more details on argument specifications.

    The 'destination' is an optional reference to a variable that will hold the option value. If destination is not specified it will be stored internally by Getopt::Compact and can be retrieved via the opts() method. This is useful if you want options to accept multiple values. The only way to achieve this is to use a destination that is a reference to a list (see the joobies option in SYNOPSIS by way of example).

configure

    Optional configure arguments to pass to Getopt::Long::Configure in the form of a hashref of key, boolean value pairs. By default, the following configuration is used:

    { no_auto_abbrev => 1, bundling => 1 }

    To disable bundling and have case insensitive single-character options you would do the following:

    new Getopt::Compact (configure => { ignorecase_always => 1, bundling => 0 });

    see Getopt::Long documentation for more information on configuration options.

usage()
    print $go->usage();

Returns a usage string. Normally the usage string will be printed automatically and the program will exit if the user supplies an unrecognised argument or if the -h or --help option is given. Automatic usage and exiting can be disabled by setting 'usage' to false (0) in the constructor (see new()). This method uses Text::Table internally to format the usage output.

status()
    print "getopt ".($go->status ? 'success' : 'error'),"\n";

The return value from Getopt::Long::Getoptions(). This is a true value if the command line was processed successfully. Otherwise it returns a false result.

opts()
    $opt = $go->opts;

Returns a hashref of options keyed by long option name. If the constructor usage option is true (on by default), then a usage string will be printed and the program will exit if it encounters an unrecognised option or the --help option is given.

AUTHOR

Andrew Stewart Williams <andrew.s.williams@adelaide.edu.au>

SEE ALSO

Getopt::Long