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)