Revision history for Params-Filter
v0.014 2026-01-27 (STABLE RELEASE)
- DISTRIBUTION: Fixed PAX headers issue permanently
- Configured Makefile.PL to use GNU tar (gtar) with --format=ustar
- This prevents CPAN rejection due to PAX headers created by macOS BSD tar
- Requires: brew install gnu-tar
- No code changes, distribution build fix only
v0.013 2026-01-27 (STABLE RELEASE)
- DOCUMENTATION: Major reorganization and cleanup
- README.md simplified from 856 to 198 lines (77% reduction)
- Removed duplicate API documentation from README (now in POD only)
- Added focused quick start examples in README
- POD reorganized to emphasize closure interface performance
- CLOSURE INTERFACE now presented first with "Maximum Performance" emphasis
- Added real-world security examples (safe logging, data segregation)
- Clear scope markers for which features apply to which interfaces
- EXAMPLES: Consolidated and organized
* Created dev-tools/ directory for development benchmarks (6 files)
* Removed redundant benchmarks from examples/
* Renamed benchmarks for clarity
* examples/ now has 11 teaching examples + 4 user benchmarks
- DISTRIBUTION: Clean perl 5.036 requirement verified
- Removed profiling artifacts from distribution
- All 73 tests pass
v0.011 2026-01-26 (STABLE RELEASE)
- NEW: Added closure interface with make_filter() function for maximum performance
- make_filter() creates optimized, reusable closures that can be 20-25% faster than
hand-written Perl filtering code due to pre-computed exclusion lookups and
specialized closure variants
- Three specialized closure variants:
* Required-only (empty accepted list) - 3.1M ops/sec
* Wildcard (accepted contains '*') - 1.3M ops/sec, 24% faster than raw Perl
* Accepted-specific (normal case) - 1.8M ops/sec, 20% faster than raw Perl
- OPTIMIZED: filter() function now uses same optimizations as closure interface:
* Pre-computed exclusion hash (O(1) lookups instead of O(n) array search)
* Hash slice for required field copying (faster bulk operations)
* Non-destructive operations with hash lookups instead of delete
* Single wildcard check instead of per-iteration checks
- All interfaces (functional, OO, closure) now use identical optimization techniques
- Closure interface is 142-239% faster than functional interface due to:
* No input parsing overhead (hashref-only input)
* No error message construction overhead
* Pre-compiled closures optimized for specific configuration
- Added comprehensive test suite for make_filter() (t/04-make_filter.t with 10 subtests)
- Added complete POD documentation for closure interface
- Added usage examples (examples/closure_interface.pl with 6 working examples)
- Added benchmark scripts:
* benchmark-three-variants.pl - Performance comparison of three closure types
* benchmark-optimized-filter.pl - Optimized filter() vs make_filter() comparison
* benchmark-make_filter.pl - Closure vs raw Perl performance
- Updated README.md with closure interface documentation and performance notes
- Updated performance considerations to clarify that closure interface provides
maximum speed while functional/OO have feature overhead
- Changed "database queries" to "database statements" for accuracy (includes inserts/updates)
- All 73 tests passing across 6 test files
- POD syntax validated
- Full backward compatibility maintained
v0.010 2026-01-25 (STABLE RELEASE)
- Updated documentation to emphasize security, compliance, and correctness
over raw performance
- Added "Consistency" as primary benefit: converts varying data formats to
consistent key-value pairs
- Rewrote performance section with more nuanced messaging based on
comprehensive benchmarking
- Added comprehensive SECURITY documentation section with examples
- Changed module description from "Fast field filtering" to
"Secure field filtering"
- All tests passing
v0.009 2026-01-24 (STABLE RELEASE)
- Fixed PAUSE indexing issue: added META.yml and META.json to distribution
- These files are required for CPAN indexing
- All 59 tests passing
v0.008 2026-01-24 (STABLE RELEASE)
- Fixed CPAN distribution issues:
- Rebuilt tarball using COPY_EXTENDED_ATTRIBUTES_DISABLE=1 to avoid
PAX headers for CPAN testers compatibility
- Added =encoding utf-8 to POD documentation to resolve non-ASCII
character warnings (→ arrows in examples)
- Removed META.json and META.yml from MANIFEST (auto-generated)
- All 59 tests passing
- POD syntax validated
v0.007 2026-01-21 (STABLE RELEASE)
- Version bump to resolve CPAN testers indexing issue
- Repository renamed: Local-Params-Filter → Params-Filter
- All package metadata updated for new repository location
- Ready for full CPAN distribution
v0.006 2026-01-20 (STABLE RELEASE)
- First stable CPAN release
- Major documentation improvements:
- Updated POD to match README structure and clarity
- Improved DESCRIPTION section with clearer "When to Use" guidance
- Enhanced INPUT PARSING section with numbered formats and better examples
- Enhanced RETURN VALUES section with clearer structure
- Improved MODIFIER METHODS documentation with important behavior notes
- Improved WILDCARD SUPPORT section
- Enhanced EXAMPLES section with complex data flows
- Fixed bug in example code (extra empty arrayref argument to filter())
- Fixed in examples/arrayref_input.pl (3 instances)
- Fixed in examples/edge_cases.pl (3 instances)
- Fixed in README.md (2 instances)
- Fixed in lib/Params/Filter.pm POD (2 instances)
- Fixed syntax error in examples/advanced_filtering.pl (hashref construction)
- Replaced problematic examples/strict_construction_test.pl with proper
examples/strict_construction.pl (educational example, no external dependencies)
- All 11 example scripts tested and working correctly
- All 59 tests passing
- Ready for production use
v0.6_002 2026-01-14 (DEVELOPER RELEASE)
- Improved message consistency: separated parsing messages from debug warnings
- Parsing messages (always shown): plain text args, odd array elements
- Debug warnings (debug mode only): unrecognized fields, excluded fields
- Updated DEBUG MODE documentation to clarify message types
- Updated Common Status Messages section with parsing vs debug distinction
- All 59 tests still passing
v0.6_01 2026-01-14 (DEVELOPER RELEASE)
- Beta release for CPAN testing and feedback
- Renamed for CPAN publication: Local::Params::Filter → Params::Filter
- Changed failure return value from 0 to undef for clearer boolean semantics
- Lowered minimum Perl version from 5.36 to 5.36 (signatures stable since 5.36)
- Updated all test files with new namespace
- Updated all example files with new namespace
- Updated README.md with new namespace
- Updated Makefile.PL for CPAN distribution
- Comprehensive POD documentation in module file
- All 59 tests passing
- Seeking feedback from CPAN testers and early adopters
v0.5.0 2026-01-13
- Renamed module from Local::Params::Strictly to Local::Params::Filter
- Renamed function: strictly() → filter()
- Renamed constructor: new_bouncer() → new_filter()
- Renamed method: admit() → apply()
- Modifier methods unchanged: set_required(), set_accepted(), set_excluded(), accept_all(), accept_none()
- Updated all test files (t/*.t) with new naming
- Updated all example files (examples/*.pl) with new naming
- Updated README.md with new terminology and examples
- Updated Changes file header
- All functionality remains identical (breaking API change only)
v0.4.0 2026-01-13
- Added modifier methods for dynamic bouncer configuration
- New methods: set_required(), set_accepted(), set_excluded()
- Added convenience methods: accept_all(), accept_none()
- new_bouncer() can now be called without arguments (defaults to reject all)
- Methods support both arrayref and list arguments
- Empty calls to set_* methods set fields to [] (empty array)
- All modifier methods return $self for method chaining
- Enables meta-programming and conditional configuration patterns
- Added comprehensive test suite: t/03-modifier-methods.t (23 tests)
- Added example script: examples/modifier_methods.pl
- Updated README.md with modifier methods documentation
- All 59 tests passing across 4 test files
v0.3.1 2025-01-12
- Enhanced wildcard feature: '*' can now appear anywhere in accepted list
- More flexible debugging: can add '*' to existing accepted fields
- ['name', 'email', '*'] now accepts all fields
- Documented wildcard behavior in README.md
- Clarified that '*' is only special in accepted parameter
v0.3.0 2025-01-12
- Added wildcard ['*'] feature to accept all fields in accepted parameter
- When ['*'] is used as accepted parameter, all fields (except exclusions) are accepted
- Empty [] still means 'accept none' (backward compatible)
v0.2.0 2025-01-12
- Renamed module from Local::Strictly to Local::Params::Strictly
- Renamed repository from Local-Strictly to Local-Params-Strictly
- Updated all documentation and examples
v0.1.0 2025-01-08
- Initial repository setup from installed version
- Fresh repository structure with ExtUtils::MakeMaker
- Parameter validation for strict construction
- Both functional and OO interfaces
- Flexible input handling (hashref, arrayref, scalar)