The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
0.850   2023-02-24  Released-By: PERLANCAR; Urgency: medium

        - No changes from 0.849_001.


0.849_001 2022-12-01  Released-By: PERLANCAR; Urgency: medium; Backward-Incompatible: yes

          - [experimental] Implicit JSON/YAML decoding on regular option (not
            foo-json and foo-yaml options) are now turned off to avoid wrong
            decoding; now users just need to specify --foo-json or --foo-yaml if
            she wants explicit decoding (see: RT#145274).


0.849   2022-03-27  Released-By: PERLANCAR; Urgency: medium

        - [ux] Show the details of clashing options.


0.848   2022-03-02  Released-By: PERLANCAR; Urgency: medium

        - [ux] Order elements in 'func.missing_args' result metadata key
          according to argument position.


0.847   2021-09-30  Released-By: PERLANCAR; Urgency: medium

	- [ux] Turn off warning about failing to parse as JSON/YAML.


0.846   2021-07-29  Released-By: PERLANCAR; Urgency: medium

	- Update to Data::Sah::Resolve 0.010.


0.845   2020-09-09  Released-By: PERLANCAR; Urgency: medium

	- Provide command-line alias summary in func.specmeta (e.g. for tab
	  completion).


0.844   2020-06-16  Released-By: PERLANCAR; Urgency: medium

	- Fix failing tests due to schema changes [RT#132716].


0.843   2019-06-26  Released-By: PERLANCAR

	- Always-false bool (e.g. 'false' or [bool=>{is_true=>0}] or
	  [bool=>{is=>0}]) now gets --no-foo, --no-foo only.


0.842   2019-06-20  Released-By: PERLANCAR

        - No functional changes.

	- Update dep: Getopt::Long::Negate::EN=0.060.


0.841   2019-04-15  Released-By: PERLANCAR

	- Update to Rinci 1.1.88 (slurpy).


0.840   2017-08-27  Released-By: PERLANCAR

        - No functional changes.

        - [test] Avoid failures due to changing schema description in
          Sah::Schema::* [RT#122903].


0.83    2017-08-09  Released-By: PERLANCAR

	- Use Getopt::Long value type 's' instead of 'i' (for int) or 'f'
	  (for float) to allow coercion e.g. from percent etc.


0.82    2017-07-22  Released-By: PERLANCAR

	- [optimize] get_args_from_argv(): Accept ggls_res to avoid
	  calculating gen_getopt_long_spec_from_meta() twice.


0.81    2017-04-19  Released-By: PERLANCAR

	- No functional changes.

	- [dist] Add missing dependencies to Sah type modules [RT#121166].


0.80    2016-12-15  Released-By: PERLANCAR

	- Workaround issue in Getopt::Long where gnu_compat disables
	  bundling as a side effect, so we enable bundling after gnu_compat
	  (ref: [RT#119165]).


0.79    2016-12-11  Released-By: PERLANCAR

	- [Bugfix] Fix determining simple/array-of-simple/hash-of-simple types.


0.78    2016-12-10  Released-By: PERLANCAR

	- [dist] Forgot to bump prereq version Perinci::Sub::GetArgs::Array
	  -> 0.16 (hash support).


0.77    2016-12-10  Released-By: PERLANCAR

	- Accept hash argument as --arg key1=val1 --arg key2=val2 ... using
	  Getopt::Long's '%' desttype.


0.76    2016-12-02  Released-By: PERLANCAR

	- Set Getopt::Long configuration gnu_compat to allow setting empty value
          '--name='.


0.75    2016-10-27  Released-By: PERLANCAR

	- Skip generating option for hidden arguments (arguments with tag
	  'hidden' or 'hidden-cli').


0.74    2016-10-07  Released-By: PERLANCAR

	- No functional changes.

	- [dist] Bump minimum prereq of Perinci::Sub::Util (latest
	  version).

	- fmt: use Markdown autolink with pm:/pod:/prog: URLs in
	  description so it can be converted to POD's L<...>.


0.73    2016-08-24  Released-By: PERLANCAR

        - For argument that has schema containing coerce rules from simple type,
          recognize it as simple (meaning not creating a --ARG-json or
          --ARG-yaml option for it but simply --ARG). For example, suppose
          argument 'foo' has schema ['array', of=>'str',
          'x.perl.coerce_rules'=>['str_comma_sep']. This means we can specify
          the value using something like '--foo 1,2,3' instead of "--foo-json
          '[1,2,3]'".


0.72    2016-07-20  Released-By: PERLANCAR

        - Resolve base type of schemas, to support arguments that have schema
          that is based on another schema.


0.71    2016-02-19  Released-By: PERLANCAR

	- [Bugfix] Forgot to option-ize name from arg spec's
	  x.name.is_singular.

	- [refactor] Use Data::Sah::Util::Type to reduce code duplication.


0.70    2015-12-17  Released-By: PERLANCAR

        - [experimental][ux] When schema is array of int/float (should also
          include bool, date, duration, or string that cannot contain commas),
          then --opt 1,2,3 will also be accepted. This is more convenient than
          having to do '--opt 1 --opt 2 --opt 3'.


0.69    2015-08-19  Released-By: PERLANCAR

	- Reduce dependencies: replace JSON with JSON::PP (core module),
	  make YAML::Old also optional.


0.68    2015-05-20  Released-By: PERLANCAR

	- Require YAML::Old as fallback for YAML::XS.


0.67    2015-05-19  Released-By: PERLANCAR

	- No functional changes.

	- Skip relevant tests when YAML::XS is not available [CT].


0.66    2015-05-13  Released-By: PERLANCAR

        - Downgrade YAML::XS dependency as RuntimeRecommends to allow this
          module to have CoreOrPP status.

        - Don't parse argument of type date/duration as JSON/YAML.

        - Remove args_groups checking, args_groups has been replaced by
          args_rels and is checked either by Perinci::CmdLine::Lite or
          Perinci::Sub::Wrapper.


0.65    2015-04-02  Released-By: PERLANCAR

	- [ux] Convert option name to singular if the argument
	  specification indicates that argument name is a plural
	  (x.name.is_plural, x.name.singular).


0.64    2015-03-24  Released-By: PERLANCAR

	- [opt] Shave off +- 2-3ms by avoiding experimental+Carp.

	- Extract negations_for_option routine to Getopt::Long::Negate::EN,
	  so it's more reusable by other modules.


0.63    2015-03-06  Released-By: PERLANCAR

	- Avoid arguments of type 're' to have JSON/YAML option.


0.62    2015-02-07  Released-By: PERLANCAR

        - Check against 'deps' argument specification property (currently only
          'arg' dep type is supported, 'any'/'all'/'none' not yet supported).
          [Rinci 1.1.72].

        - Check against 'args_groups' property [Rinci 1.1.72].


0.61    2015-01-03  Released-By: PERLANCAR

	- No functional changes.

	- Rebuild (Generate TODO.md).


0.60    2014-12-19  Released-By: PERLANCAR

        - Shut up warning from Getopt::Long (by locally installing a
          $SIG{__WARN__} handler) when strict=0.


0.59    2014-11-20  Released-By: PERLANCAR

	- Add common_opts/neg_opts/pos_opts in func.specmeta, to help
          Perinci::Sub::To::CLIOptSpec.


0.58    2014-11-19  Released-By: PERLANCAR

	- Add --isnt-FOO and --arent-FOO as negation forms for --is-FOO and
	  --are-FOO (and vice versa) (currently untested).


0.57    2014-10-24  Released-By: PERLANCAR

	- Add --ARG-base64 for buf arguments.

	- [ux] Change negated options for with-foo -> without-foo (and vice
	  versa) instead of the default nowith-foo + no-with-foo.


0.56    2014-10-23  Released-By: PERLANCAR

	- No functional changes.

	- Typo: unimplemented status is 501, not 502.


0.55    2014-10-11  Released-By: PERLANCAR

	- Support is_flag cmdline_alias property.

	- [Bugfix] cmdline alias handler should also get the same treatment
	  as arg handler.


0.54    2014-10-10  Released-By: PERLANCAR

	- Add support for element_meta (Rinci 1.1.56).


0.53    2014-10-10  Released-By: PERLANCAR

	- No functional changes.

        - Optimize gen_getopt_long_spec_from_meta() by avoiding a bunch of calls
          to parse_getopt_long_opt_spec(), making it about 60% faster for a
          sample metadata of 5 arguments + 1 cmdline_alias.

        - Add a couple of tests.


0.52    2014-10-09  Released-By: PERLANCAR

	- Support argument submetadata (Rinci 1.1.55).


0.51     2014-09-03  Released-By: PERLANCAR

         - Add option: ignore_converted_code (this option is needed e.g. by
           Perinci::Sub::Complete to keep tab completion working even when there
           is coderef cmdline_aliases property in arg spec).


0.50     2014-08-06  Released-By: SHARYANTO

         - Revert previous feature (accept _genres).


0.49     2014-08-06  Released-By: SHARYANTO

         - Remove orig_spec key, because we now no longer re-order opts in ospec.

         - get_args_from_argv(): Accept _genres  Released-By: a temporary dirty hack
           argument to avoid doing gen_getopt_long_spec_from_meta() again.


0.48     2014-07-25  Released-By: SHARYANTO

         [ENHANCEMENTS]

         - For arguments of type 'array of simple scalars', generate
           Getopt::Long option spec as 'NAME=s@' instead of just 'NAME=s'; this
           makes it more evident that the option is repeatable.


0.47     2014-07-23  Released-By: SHARYANTO

         - No functional changes.

         - Adjust to Getopt::Long::Util 0.77.


0.46     2014-07-23  Released-By: SHARYANTO

         [INCOMPATIBLE CHANGES]

         - Adjust to Getopt::Long::Util 0.46 (option ordering).

         - Change 'common_opts' argument form so it is now the same as
           Perinci::CmdLine's.


0.45     2014-07-22  Released-By: SHARYANTO

         - Don't attempt parsing argv as json/yaml if array of simple scalar.


0.44     2014-07-18  Released-By: SHARYANTO

         - These changes are to aid completion.

         - gen_getopt_long_spec_from_meta(): Provide 'func.opts_by_arg',
           'func.opts_by_common', 'func.common_opts' & 'func.func_opts'.

         - get_args_from_argv(): Return gen_getopt_long_spec_from_meta result in
           func.gen_getopt_long_spec_result to avoid caller having to call
           gen_getopt_long_spec_from_meta() separately.

         [INCOMPATIBLE CHANGES]

         - gen_getopt_long_spec_from_meta(): func.*opts are now prefixed with
           --/-.


0.43     2014-07-18  Released-By: SHARYANTO

         - gen_getopt_long_spec_from_meta(): Add 'parsed' key (result from
           Getopt::Long::Util's parse_getopt_long_opt_spec()). Add 'alias_for'
           key for alias options to trace back original option. Both to aid
           help/usage generation.

         - [Bugfix] Some bug fixes.


0.42     2014-07-18  Released-By: SHARYANTO

         - gen_getopt_long_spec_from_meta(): Add 'orig_spec' to common_opts'
           alias specmeta to be able to trace back the original key (to aid
           help/usage generation).


0.41     2014-07-18  Released-By: SHARYANTO

         - gen_getopt_long_spec_from_meta(): Add is_alias to alias specmeta, add
           {,non}code_aliases to non-alias specmeta (to aid help/usage
           generation).


0.40     2014-07-18  Released-By: SHARYANTO

         - No functional changes.

         - Revert previous decision: Deliberately not including YAML::Syck &
           JSON as prereq to reduce deps. It complicates testing [CT].


0.39     2014-07-17  Released-By: SHARYANTO

         - To reduce dependencies, deliberately no longer lists JSON and
           YAML::Syck as dependencies. These modules are only required when
           'per_arg_json' and 'per_arg_yaml' are enabled.

         [BUG FIXES]

         - Only try to parse positional command-line arguments as JSON/YAML when
           per_arg_yaml/per_arg_json is true.


0.38     2014-07-12  Released-By: SHARYANTO

         - Add option: 'args', to set initial value for the resulting arguments.


0.37     2014-07-09  Released-By: SHARYANTO

         [INCOMPATIBLE CHANGES]

         - Changes the interface and the parsing rules slightly. Since I want to
           remove --action and the subtle difference of 'extra_getopts_before'
           and 'extra_getopts_after'. Now we avoid clashes between common
           options like '--help' and function arguments of the same name (they
           will be renamed to '--help-arg', or '--help-arg2' and so on upon
           clash). Clash will also be avoided between '--ARGNAME' and
           '--ARGNAME-json' should that happen.

         [REMOVED FEATURES]

         - Remove 'check_required_args' option. Now function still returns 200
           on missing args. Missing args are already reported in the result
           metadata ('func.missing_args').

         - Remove 'extra_getopts_before' and 'extra_getopts_after', replace it
           with 'common_opts' (a hash of Getopt::Long specification name and
           handlers).

         [ENHANCEMENTS]

         - Refactor the code that generates Getopt::Long spec to its own
           function: gen_getopt_long_spec_from_meta() so it's reusable from e.g.
           routine that wants to generate usage/help message.


0.36     2014-07-08  Released-By: SHARYANTO

         - Adjust to Perinci::Sub::GetArgs::Argv 0.14.

         - Add 'meta_is_normalized' option.


0.35     2014-07-04  Released-By: SHARYANTO

         - Still call cmdline_on_getopt routine when value for function argument
           is specified through command-line argument instead of command-line
           options. This is usually desired to "catch" all command-line
           options/arguments (process them through cmdline_on_getopt routine).
           Note that the Rinci::function standard hasn't said anything about
           this yet.

         - Provide 'opt' for cmdline_on_getopt routine to let it know whether it
           is specified as an option (where 'opt' will contain the option name,
           e.g. '--foo 1' will have 'opt' set to 'foo') or whether it is
           specified in the command-line argument (where 'opt' will be set to
           undef).


0.34     2014-04-16  Released-By: SHARYANTO

         - Return status 501 when encountering a cmdline_alias where its code
           has been converted into 'CODE'. This will allow modules like
           Perinci::CmdLine or App::riap to retry sending argv to the server
           instead of parsing argv on the client side.

         - Replace each() with for() [ref:
           http://blogs.perl.org/users/rurban/2014/04/do-not-use-each.html].


0.33     2014-04-10  Released-By: SHARYANTO

         - No functional changes.

         - Replace Data::Clone with Function::Fallback::CoreOrPP.


0.32     2014-03-15  Released-By: SHARYANTO

         - No functional changes. Rebuild to fix POD documentation (function
           argument documentation was broken in Perinci-To-POD < 0.42).


0.31     2014-01-21  Released-By: SHARYANTO

         [INCOMPATIBLE CHANGES]

         - Interpret true return value from on_missing_required_args hook to
           mean avoid complaining about missing argument, so we allow argument
           to be missing in the final result.


0.30     2013-12-25  Released-By: SHARYANTO

         - Respect 'cmdline_on_getopt' argument spec (Rinci 1.1.43).


0.29     2013-11-13  Released-By: SHARYANTO

         [BUG FIXES]

         - To be consistent, 'argv' elements should also be emptied for
           positional arguments.


0.28     2013-11-08  Released-By: SHARYANTO

         [BUG FIXES]

         - on_missing_required_args hook should also be called for required
           args, not all missing args.


0.27     2013-10-28  Released-By: SHARYANTO

         - Rename result metadata 'func.has_missing_arg' (bool) to
           'func.missing_arg' (str) to report the name of the missing argument.


0.26     2013-10-28  Released-By: SHARYANTO

         - When check_required_args=0 and there is missing argument, provide
           hint to user via 'func.has_missing_arg' result metadata.


0.25     2013-10-15  Released-By: SHARYANTO

         - Use Data::Clean::FromJSON so that Data::Sah-generated validator code
           in wrapped functions doesn't choke with JSON::{PP,XS}::Boolean
           objects.


0.24     2013-09-20  Released-By: SHARYANTO

         - cmdline_alias for bool doesn't get --noX ("alias!") if it specifies
           code, which makes more sense.


0.23     2013-08-15  Released-By: SHARYANTO

         - Perform JSON/YAML parsing for command-line arguments too.


0.22     2013-04-05  Released-By: SHARYANTO

         - Add no_getopt_compat Getopt::Long::Configure to disregard "+" as
           option starter.


0.21     2012-08-09  Released-By: SHARYANTO

         [INCOMPATIBLE CHANGES]

         - Enable Getopt::Long's configuration 'bundling' to get more
           traditional behavior (e.g. -Ifoo instead of having to use -I foo).
           This means you no longer can specify -I=foo since it means -I =foo
           now.

         [FIXES]

         - Fix handling of cmdline_aliases (didn't use the same option handler
           routine).


0.20     2012-08-08  Released-By: SHARYANTO

         [INCOMPATIBLE CHANGES]

         - Change behavior of parsing arguments with type of array-of-scalar,
           now uses --foo 1 --foo 2 a la Getopt::Long.

         [ETC]

         - Remove user documentation, this module will be "internal" and used
           from Perinci::CmdLine.


0.19     2012-07-23  Released-By: SHARYANTO

         - These changes are made to support `cmdline_src` arg spec key (Rinci
           1.1.21+). Actual implementation will be done by Perinci::CmdLine.

         - Add 'on_missing_required_args' option.

         - Add 'allow_extra_elems' option.


0.18     2012-07-19  Released-By: SHARYANTO

         - Add 'per_arg_json' option.

         - Also try JSON parsing as well as YAML on non-scalar arguments.


0.17     2012-04-02  Released-By: SHARYANTO

         [INCOMPATIBLE CHANGE]

         - Change 'extra_getopts_before' and 'extra_getopts_after' from hash to
           array, because ordering matters in GetOptions().


0.16     2012-04-02  Released-By: SHARYANTO

         [INCOMPATIBLE CHANGE]

         - Change $_pa_skip_check_required_args internal flag with
           'check_required_args' option.

         - Replace extra_getopts with extra_getopts_before and
           extra_getopts_after.


0.15     2012-03-29  Released-By: SHARYANTO

         [FIXES]

         - extra_getopts --foo=s was cut and became --foo.


0.14     2012-03-23  Released-By: SHARYANTO

         [INCOMPATIBLE CHANGES, REMOVED FEATURES]

         - Argument with underscore (foo_bar) is only represented with --foo-bar
           and no longer with --foo_bar, because having both disrupts
           Getopt::Long's ability to autocomplete (e.g. --foo).


0.13     2012-03-23  Released-By: SHARYANTO

         - Support arguments with dot (e.g. 'with.dot') using --with-dot syntax.


0.12     2012-02-28  Released-By: SHARYANTO

         - Parse arg's 'cmdline_aliases'.


0.11     2012-02-22  Released-By: SHARYANTO

         - Rename distribution from Sub-Spec-GetArgs-Argv to
           Perinci-Sub-GetArgs-Agv.


0.10     2012-01-27  Released-By: SHARYANTO

         - No functional changes. Build fix.


0.09     2012-01-27  Released-By: SHARYANTO

         - No functional changes. Upgrade to Data-Sah-0.02.


0.08     2012-01-20  Released-By: SHARYANTO

         - No functional changes. Mark deprecation.


0.07     2011-11-23  Released-By: SHARYANTO

         - No functional changes. Replace Data::Sah::Util with Data::Sah.


0.06     2011-08-31  Released-By: SHARYANTO

         - No functional changes. Updated because _parse_schema() is moved from
           Sub::Spec::Utils to Data::Sah::Util.


0.05     2011-08-25  Released-By: SHARYANTO

         - No functional changes. Update to Sub::Spec 0.15.


0.04     2011-08-03  Released-By: SHARYANTO

         [NEW FEATURES]

         - Added per_arg_yaml option to allow specifying YAML for scalar types,
           e.g. --name-yaml '~'.


0.03     2011-07-29  Released-By: SHARYANTO

         [FIXES]

         - (build) Add missing test dep: Data::Clone.

         [ETC]

         - Internally now uses Sub::Spec::GetArgs::Array to process arg_pos and
           arg_greedy arg type clauses.


0.02     2011-07-26  Released-By: SHARYANTO

         - No functional changes. Allow Sub::Spec::CmdLine to access an internal
           variable (yeah, some coupling still exists). Localize
           Getopt::Long::Configure() effect.


0.01     2011-07-26  Released-By: SHARYANTO

         - First release, spun off from Sub::Spec::CmdLine.