NAME Perinci::Sub::GetArgs::Argv - Get subroutine arguments from command line arguments (@ARGV) VERSION version 0.14 SYNOPSIS use Perinci::Sub::GetArgs::Argv; my $res = get_args_from_argv(argv=>\@ARGV, meta=>$meta, ...); DESCRIPTION This module provides "get_args_from_argv()", which parses command line arguments (@ARGV) into subroutine arguments (%args). This module is used by Perinci::CmdLine. This module uses Log::Any for logging framework. This module has Rinci metadata. FAQ SEE ALSO Perinci FUNCTIONS get_args_from_argv(%args) -> [status, msg, result, meta] Get subroutine arguments (%args) from command-line arguments (@ARGV). Using information in function metadata's 'args' property, parse command line arguments '@argv' into hash '%args', suitable for passing into subs. Uses Getopt::Long's GetOptions to parse the result. As with GetOptions, this function modifies its 'argv' argument. Why would one use this function instead of using Getopt::Long directly? Among other reasons, we want YAML parsing (ability to pass data structures via command line) and parsing of pos and greedy. * How this routine uses the 'args' property Bool types can be specified using: --ARGNAME or --noARGNAME All the other types can be specified using: --ARGNAME VALUE or --ARGNAME=VALUE VALUE will be parsed as YAML for nonscalar types (hash, array). If you want to force YAML parsing for scalar types (e.g. when you want to specify undef, '~' in YAML) you can use: --ARGNAME-yaml=VALUE but you need to set 'perargyaml' to true. This function also (using Perinci::Sub::GetArgs::Array) groks 'pos' and 'greedy' argument specification, for example: $SPEC{multiply2} = { v => 1.1, summary => 'Multiply 2 numbers (a & b)', args => { a => ['num*' => {pos=>0}], b => ['num*' => {pos=>1}], } } then on the command-line any of below is valid: % multiply2 --a 2 --b 3 % multiply2 2 --b 3; # first non-option argument is fed into a (pos=0) % multiply2 2 3; # first argument is fed into a, second into b (pos=1) Arguments ('*' denotes required arguments): * argv* => *array* If not specified, defaults to @ARGV * extra_getopts => *hash* Specify extra Getopt::Long specification. If specified, add extra Getopt::Long specification (as long as it doesn't clash with spec arg). This is used, for example, by Perinci::CmdLine::run() to add general options --help, --version, --list, etc so it can mixed with spec arg options, for convenience. * meta* => *hash* * per_arg_yaml => *bool* (default: 0) Whether to recognize --ARGNAME-yaml. This is useful for example if you want to specify a value which is not expressible from the command-line, like 'undef'. % script.pl --name-yaml '~' * strict => *bool* (default: 1) Strict mode. If set to 0, will still return parsed argv even if there are parsing errors. If set to 1 (the default), will die upon error. Normally you would want to use strict mode, for more error checking. Setting off strict is used by, for example, Perinci::BashComplete. Return value: Returns an enveloped result (an array). First element (status) is an integer containing HTTP status code (200 means OK, 4xx caller error, 5xx function error). Second element (msg) is a string containing error message, or 'OK' if status is 200. Third element (result) is optional, the actual result. Fourth element (meta) is called result metadata and is optional, a hash that contains extra information. AUTHOR Steven Haryanto COPYRIGHT AND LICENSE This software is copyright (c) 2012 by Steven Haryanto. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.