Changes for version 0.03 - 2026-06-21
- Enhancements
- Extract _normalize_name and _extract_parts as private helpers
- Add Readonly constants for all format/style/separator magic strings
- Enforce encapsulation with Sub::Private on internal helpers
- Add full POD: LIMITATIONS, MESSAGES, FORMAL SPECIFICATION, PSEUDOCODE
- Add locale test suite (t/locales.t) with BAIL_OUT sanity, per-locale croak checks
- Bug Fixes
- abbreviate(): default format dropped a last name of literally "0" (e.g. "John 0" gave "J." instead of "J. 0"). The final ternary was gating on the truthiness of $last_name instead of length($last_name); "0" is the one non-empty Perl string that is falsy. Found via mutation testing (xt/mutant_*.t survivor COND_INV_362_2)
- Tests
- Latest test dashboard
- Remove hardcoded test count from t/30-basics.t
- Remove redundant Test::Exception from t/extended_tests.t
- Remove redundant Test::Deep from t/function.t
- Fix missing semicolon in t/extended_tests.t
- Add t/mutant_killers.t: regression tests for the "0" last-name fix above, plus a property-based guard documenting that COND_INV_362_2 is an equivalent mutant once the fix is applied
- Skip the "alarm not cancelled by abbreviate" subtest in t/unit.t on Windows, where alarm() is not reliably implemented
- Build
- Move Readonly to PREREQ_PM (used in module, not just tests)
- Add Sub::Private to PREREQ_PM
Documentation
Modules
Create abbreviated name formats from full names