Revision history for Params-Get

0.17	Tue Aug 18 09:38:35 PM EDT 2026
	[ Tests ]
	- Improved usage of Test::Needs
	- Add t/transaction.t: 34-subtest transaction-flow suite (9 sections): multi-step
	    argument-normalisation lifecycle, three-package dispatch pipeline, mid-pipeline
	    croak and recovery (state frozen at croak point; retry succeeds; $@ clean),
	    idempotency (N-repeated normalisations -> consistent isolated results), caller-
	    variable isolation ($val defensive-copy invariant), OO method chain, state
	    machine lifecycle (idle->receiving->processing->complete each using a different
	    calling convention), exception state integrity ($@/$!/$_/$,/$;), and concurrent-
	    like independent invocations (closures sharing source args; no cross-contamination)
	- Add t/path.t: 43-subtest CFG path-coverage suite (11 sections): one test per
	    uniquely identifiable execution path (P01-P31); exercises all four shorthand
	    AND-chain sub-conditions (E1-E4), all OO sub-dispatch branches (Q/R/S), the
	    L395 from_arrayref wrap path, the flat even/odd terminal split (U=T/F), and
	    confirms the ARRAY arm of the De Morgan disjunction is reachable only via the
	    \@_ detect path (D=T); zero unreachable lines confirmed

0.16	Fri Aug  7 09:51:33 AM EDT 2026
	[ Bug fixes ]
	- Don't rely on PVS (GitHub#5)
	  I have not been able to reproduce this, so I do not know if this fix works

	[ Enhancements ]
	- Remove provably redundant "$default &&" pre-check in the positional-names
	    guard: ref(X) eq "ARRAY" implies X is always truthy, so the conjunction's
	    left operand can never flip the branch (deductive reduction R1)
	- Collapse five one-arg dispatch arms to two via De Morgan boolean reduction:
	    SCALAR (deref) pulled left as fast guard; plain scalar/ARRAY/CODE/blessed
	    merged into one disjunction (reduction R2)
	- Update PSEUDOCODE POD to document the formal premises behind both reductions
	- Cache ref($default) in $default_ref to avoid 2-3 redundant ref() calls per
	    invocation when $default is an ARRAY ref or a plain string
	- Replace named intermediate hash (my %rc = ...; \%rc) with direct anonymous
	    hashref ({ @{$args} }) in the even-length named-pairs path: ~9% faster

	[ Tests ]
	- Add t/lib/TestHelper.pm: shared $USAGE_RE and $DEFAULT_CROAK_RE constants,
	    eliminating five identical per-file Readonly definitions
	- Fix greedy qr/latitude.*must be/ to non-greedy with /x in t/integration.t
	- Use \Q->\E instead of bare -> in regex literals in t/extended_tests.t
	- Add t/cgi_security.t: 32-subtest penetration test suite covering command
	    injection, path traversal, XSS, CRLF header injection, SQL injection
	    passthrough, STDIN isolation, duplicate-key attack vector, hostile $default
	    values, resource exhaustion, global-state integrity, and taint propagation
	- Add t/domain.t: 53-subtest domain tests (11 sections): EP for all 12
	    $default type partitions (EP1-EP12), BVA on $default string length
	    (0/1/65536) and ARRAY key count (0/1/N>args/N<args), all 7 @args count
	    partitions (CN0a-CN5) including large-count (1000), fast-path boundary,
	    all single-arg type sub-partitions (undef/"0"/""/string/SCALAR/ARRAY/CODE/
	    blessed/HASH-LIMITATION), OO options hash key-count BVA (0/1/N), falsy
	    $default shorthand boundaries, and combinatorial edge interactions
	- Add t/data-flow.t: 45-subtest DU-chain coverage (10 sections): $default
	    lifecycle and caller-alias isolation, $default_ref cache correctness,
	    $args dual-definition-site equivalence, $from_arrayref conditional flag,
	    $num_args dispatch correctness, $arg/$kind dispatch integrity, $val
	    defensive-copy invariant (caller not mutated via REF-unwrap), %rc
	    positional-names assembly (fill, discard, undef slots), return-value
	    identity (fast path vs. fresh hashref), and global-state isolation

0.15	Tue Jun 30 10:17:42 EDT 2026
	[ Bug fixes ]
	- Ensure Makefile.PL has the latest META_MERGE format
	- Replace Devel::Confess::longmess (internal API) with Carp::confess
	- Remove Devel::Confess dependency: it installed process-wide %SIG handlers
	    as a library side-effect and read taintable env vars under -T
	- Fix caller variable mutation: REF-unwrap now works on a copy, not the
	    @_ alias, so the caller's variable is never silently modified
	- Fix array-slice syntax @{$_[0]}[0] -> $_[0]->[0]

	[ New features ]
	- $default may now be an arrayref of positional key names:
	    get_params([qw(name age)], 'Alice', 30) -> { name => 'Alice', age => 30 }

	[ Tests ]
	- Add t/locales.t: verify error messages are locale-independent
	- Add arrayref-default coverage to t/get_params.t

	[ Code quality ]
	- Modernise Exporter: use parent 'Exporter' replaces @ISA manipulation
	- Add Readonly sentinels for ref-type strings
	- Remove dead commented-out code and FIXME blocks
	- Expand POD: LIMITATIONS, MESSAGES table, FORMAL SPECIFICATION, PSEUDOCODE

0.14	Tue May 19 21:40:21 EDT 2026
	Document the default argument
	Sanity check $default
	Bug fixed where named-parameter extraction was mishandling hashref arguments in certain calling conventions,
		where the default was the key to the wanted hash value

0.13	Mon Aug  4 16:59:56 EDT 2025
	Back out 0.12, too much breakage

0.12	Mon Aug  4 14:34:29 EDT 2025
	Params::Get::get_params('list', []) now returns empty array

0.11	Mon Jul 28 07:41:24 EDT 2025
	get_params(undef, undef) now returns undef

0.10	Fri Jul 25 11:37:24 EDT 2025
	Improved handling of:
		in main:
			routine('countries' => []);
		in routine():
			$params = Params::Get::get_params('countries', \@);

0.09	Wed Jul 23 13:46:12 EDT 2025
	Improved handling of:
		in main:
			routine('country' => 'US');
		in routine():
			$params = Params::Get::get_params('country', \@);

0.08	Thu May 29 14:05:49 EDT 2025
	Check number of parameters before the quick return
	Use Devel::Confess to give a full stacktrace
	Handle get_params('foo', {}), and get_params('foo' => {});

0.07	Fri May 23 07:07:13 EDT 2025
	Fix dependancy. I added Params::Get rather than Scalar::Utils (RT#165760)

0.06	Thu May 22 16:51:58 EDT 2025
	Allow the default to be a CODE ref

0.05	Thu May 22 13:35:12 EDT 2025
	Handle the model of a mandatory parameter followed by a hash ref of options
	Go some way to fixing problems using \@_ rather than @_

0.04	Mon Apr 28 16:50:23 EDT 2025
	Fix when there's only one argument which is a ref to an array

0.03	Thu Apr 24 10:17:51 EDT 2025
	Allow a ref to an array to be past to reduce size of the stack

0.02	Mon Mar 24 07:43:54 EDT 2025
	Fewer tests in the code

0.01	Thu Feb 27 12:16:57 EST 2025
        First draft
