Changes for version 0.16 - 2026-08-07

  • 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

Documentation

Modules

Normalise subroutine arguments regardless of calling convention