Tiny

>; my $usage = pod2usage($pod); if $usage { say "\nUsage:\n$usage\n"; exit 1; }

NAME

Getopt::Tiny - Tiny option parser for Perl6

SYNOPSIS

use v6;
use Getopt::Tiny;
my $opts = { host => '127.0.0.1', port => 5000 };
get-options($opts, <
        e=s
        I=s@
        p=i
        h|host=s
    >);

DESCRIPTION

Getopt::Tiny is tiny command line option parser library for Perl6.

FEATURES

  • Fluent interface

  • Built-in pod2usage feature

MOTIVATION

Perl6 has a great built-in command line option parser. But it's not flexible. It's not perfect for all cases.

Function interface

get-options(Hash $opts, Array[Str] $definitions, Bool :$pass-through=False)

Here is a synopsis code:

get-options($args, <
        e=s
        I=s@
        p=i
        h|host=s
    >);

$definitions' grammar is here:

token TOP { <key> '=' <type> }
    token key { <short> [ '|' <long> ]?  | <long> }
token short { <[a..z A..Z]> }
    token long { <[a..z A..Z]> <[a..z A..Z 0..9]>+ }
token type {
        's'  | # str
        's@' | # array of string
        '!'  | # bool
        'i'    # int
    }

Parse options from @*ARGS.

$opts should be Hash. This function writes result to $opts.

$definitions should be one of following style.

If you want to pass-through unknown option, you can pass :pass-through as a named argument like following:

get-options($x, $y, :pass-through);

This function modifies @*ARGS and $PROCESS::ARGFILES.

OO Interface

METHODS

my $opt = Getopt::Tiny.new()

Create new instance of the parser.

$opt.str($opt, $callback)

If $opt has 1 char, it's equivalent to $opt.str($opt, Nil, $callback), $opt.str(Nil, $opt, $callback) otherwise.

$opt.str($short, $long, $callback)

Add string option.

$short accepts -Ilib or -I lib form. $long accepts --host=lib or --host lib form.

Argument of $callback is Str.

$opt.int($opt, $callback)

If $opt has 1 char, it's equivalent to $opt.int($opt, Nil, $callback), $opt.int(Nil, $opt, $callback) otherwise.

$opt.int($short, $long, $callback)

Add integer option.

$short accepts -I3 or -I 3 form. $long accepts --port=5963 or --port 5963 form.

Argument of $callback is Int.

$opt.bool($opt, $callback)

If $opt has 1 char, it's equivalent to $opt.bool($opt, Nil, $callback), $opt.bool(Nil, $opt, $callback) otherwise.

$opt.bool($short, $long, $callback)

Add boolean option.

$short accepts -x form. $long accepts --man-pages or --no-man-pages form.

Argument of $callback is Bool.

$opt.parse(@args)

Run the option parser. Return values are positional arguments.

This operation does *not* modify @*ARGS and $PROCESS::ARGFILES.

pod2usage

This library shows POD's SYNOPSIS section in your script as help message, when it's available.

COPYRIGHT AND LICENSE

Copyright 2015 Tokuhiro Matsuno <[email protected]>

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.