NAME
Getopt::Again - Yet another attempt at a universal Getopt tool.
DESCRIPTION
Getopt tool that takes short form -abc
and/or long form --alpha
options. Options may be boolen, or accept values. Values can be specified via --foo val
or --foo=val
forms. Can also use a regex to slurp up matching options. Ability to auto-generate usage and help strings for you when desired.
ANOTHER GETOPT TOOL!!!!
Yeah... Sorry about that. Here is a relevant XKCD: http://xkcd.com/927/.
I have not yet found a Getopt module that works the way I would like. It may exist, but the author is doing a poor job of reaching me and my searches have failed.
I went a long time refusing to add yet more clutter to the Getopt namespace, but I am tired of writing custom parsing for options every time I write a script. So here it is, my way, and I don't care if nobody ever uses it, I won't force you.
SYNOPSYS
SCRIPT
use Getopt::Again enable_help => 1; # Default is 0
opt_bools qw/alpha beta/; # Quickly define some boolean options
opt_lists qw/gamma zeta/; # Quickly define some options that accept multiple args
opt_params qw/foo bar/; # Quickly define some options that accept a single arg
opt_paths qw/origin dest/; # Quickly define some options that take directory paths
opt_files qw/config/; # Quickly define some options that take file paths
# All arguments to opt_add are optional except the name.
opt_add my_opt => (
type => 'string', # Or 'bool', 'regex', 'path', 'file'
list => 1, # True to take multiple values
default => 'stuff', # Default value
example => " 'a string'", # Example value, for help/usage
alias => [ 'the_opt', 'm' ], # Alternate names
process => sub { ... }, # Can also be a validation regex
description => "My option ..." # For help/usage
split_on => ",", # Split values (list only)
regex => qr/^foo-(.+)$/, # Match options like this, use the capture for value
);
my $usage = opt_usage();
my $help = opt_help();
# Get the options and args from @ARGV. @ARGV is not altered
my (%opts, @args) = opt_parse(@ARGV);
OOP
use Getopt::Again();
my $ga = Getopt::Again->new(enable_help => 1);
$ga->add('my_opt' => (
type => 'string', # Or 'bool', 'regex', 'path', 'file'
list => 1, # True to take multiple values
default => 'stuff', # Default value
example => " 'a string'", # Example value, for help/usage
alias => [ 'the_opt', 'm' ], # Alternate names
process => sub { ... }, # Can also be a validation regex
description => "My option ..." # For help/usage
split_on => ",", # Split values (list only)
regex => qr/^foo-(.+)$/, # Match options like this, use the capture for value
));
my $usage = $ga->usage_string();
my $help = $ga->help_string();
# Get the options and args from @ARGV, @ARGV is not altered
my (%opts, @args) = $ga->parse(@ARGV);
PARSING RULES
- A single dash denotes 1-character options, so
-xyz
is seen as the x, y, and z options. -
command -xyz command -x -y -z command --xerxes --yolk --zebra
- The final option in a set of single dash options may have an argument.
-
command -xf thing command -xyzf thing
- Double dash denotes long form
--foo
is seen as the 'foo' option. -
command --thing
- Options that accept arguments may take the
--opt=val
or--opt val
forms. -
command --thing=val command --thing val
- Options that can have a list of values may specify a delimiter, and/or can be listed multiple times.
-
command --thing x --thing y --thing z command --thing x,y,z command --thing x.y.z
- When it is not ambiguous, you may use the first character of the long form in a short form.
-
These work:
command --xerxes command -x
This would not:
command --xerxes command --xandu command -x # Nope! ambiguous (unless -x is defined directly)
- End of params is
--
as expected, nothing after this will be parsed, instead they are added to the list of arguments. -
command -xyz -- --this_is_not_an_opt --this_is_an_arg
EXPORTS
- $ga = opt_meta()
-
Get the underlying Getopt::Again object.
- opt_bools(qw/awake alive/)
-
Quickly define some boolean options.
- opt_lists(qw/friends family/)
-
Quickly define some list options.
- opt_params(qw/name age/)
-
Quickly define some options that take strings.
- opt_paths(qw/origin dest/)
-
Quickly define some options that take paths (they must exist).
- opt_files(qw/input config/)
-
Quickly define some options that take files (they must exist).
- opt_add(NAME, %OPTIONS)
-
Add an option.
- $usage = opt_usage()
- opt_usage($set)
-
Get or set the usage string (returns "$0 $string", do not include $0 when setting).
- $help = opt_help()
-
Get the help string.
- ($opts, $args) = opt_parse(...)
-
Parse a parameters (@ARGV is the usual argument).
An exception will be thrown if an unknown option is specified.
$opts is a hashref, $args is an arrayref.
- opt_use_help()
-
Enable the --help and -h options.
OPTION PROPERTIES
- type
-
Values may be one of:
'string', 'bool', 'regex', 'file', 'path'
.If none is specified it is guessed. Names with more than 1 character default to string, named with 1 character only default to bool.
- list
-
True or false. When true the option will always be an arrayref containing 0 or more values.
- default
-
Specify the default value when none was specified. For bools this gets normalized to true or false. For lists the default is a new empty array.
- example
-
Example for documentation, usually an example value prefixed with either a space or equal sign:
example => ' foo',
or
example => '=foo',
- process
-
Post-processing on the value. If this is a regex than an exception will be thrown for any value that does not match.
The value may also be a coderef. For the coderef
$_
will be set to the value being processed. The value will also be passed in as the only argument. Whatever the coderef returns will replace the value, so this is a hook to allow you to modify the value. - description
-
Provide a long description of the option for the help string.
- split_on
-
Specify a delimiter for list options.
- regex
-
Specify a regex to be used to identify parameters. Use this if you want something like
enable-*
to be captured.list => 1, regex => qr/^enable-(.*)$/,
This will match all the following:
--enable-food --enable-protection
In these cases the value will be set to the first capture group, so in this case:
[ 'food', 'protection' ]
If there is no capture
$1
, then the remaining string after the match$'
will be used.
OBJECT METHODS
- $ga->opt_spec($name)
-
Get the specification for an option.
- $ga->add($name => %properties)
-
Add an option
- ($opts, $args) = $ga->parse(@ARGV)
-
Parse a parameters (@ARGV is the usual argument).
An exception will be thrown if an unknown option is specified.
$opts is a hashref, $args is an arrayref.
- $ga->usage_string
-
Get or set the usage string (returns "$0 $string", do not include $0 when setting).
- $ga->help_string
-
Get the help string
- $ga->enable_help
-
Enable the help (
--help
and-h
) tools.
SEE ALSO
Everything in the massive Getopt namespace.
On second thought, don't, you do not have that much time.
AUTHORS
Chad Granum exodist7@gmail.com
COPYRIGHT
Copyright (C) 2014 Chad Granum
Getopt-Again is free software; Standard perl license (GPL and Artistic).
Getopt-Again is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license for more details.