Revision history for Perl extension Hustle::Table v0.8.0 2026-04-07 [improvements] - Reduce cache/hash lookups v0.8.0 2025-10-28 [changes] - regular expression matchers are now expected as strings, not a RegExp - Internally converted to RegExp as required - Code matchers now need an explicit 'code' type specified - Updated tests to match new restrictions - Adding items to the table now must only be performed with add method [fixes] - POD now more accurately documents current usage and API v0.7.3 2025-09-09 [fixes] - ensure stringification of array contents is joined with an empty string - local set $" to the empty string before template/eval executed v0.7.2 2025-08-08 [improvements] - remove output array allocation when a cache hit is made. Only allocate on new outputs v0.7.1 2025-07-29 [fixes] - Updated to use Template::Plex v0.9.0 - Fixed memory leak when generating dispatcher v0.7.0 2025-01-11 [improvements] - Now will return multiple matches not just first match - Dispatcher will process a list in a single call - Will return the default entry only when nothing else matches - Significant performance improvements with cached regexp matching - Cache is cleared when reusing with multiple calls to prepare_dispatcher v0.6.1 2023-08-26 [improvements] - Removed use Carp - Removed use version - Replaced use constant and use enum with use constant::more v0.6.0 2023-06-07 [improvements] - Regular expressions from non core regexp engines are now processed as a regexp directly. Previously these would not be detected, and assumed a string to then be compiled into a core regexp - Added github actions to repo [tests] - Added test for regexp matching with a no capture groups - Added test for regexp matching with a capture group not capturing [fixes] - captures are now copied into a new array and not a shared array across the table. - captures are now returned as per the documentation for regexps with no captured items (i.e ref to empty array, instead of undef) - Turn off 'not numeric' warnings in main table code to remove noise when testing a string input against a numeric matcher [pod] - Typo fixes. - Add a section on new non core Regexp improvements 0.5.5 Wed 17 Aug 2022 15:14:43 AEST - Added subroutine matching type. A CODE ref can be used to match the input. Called with the input as the first argument and a reference to the entry value as the second element - Fixed bug where default matcher could not be updated with hash or array via the add method. An exuberant croak test/call prevented the adding of an entry when the matcher was 'undef'. An undef matcher actually represents the default matcher (match any). Prior to this fix only explicit set_default method would update default matcher. - Fixed documentation around required elements when adding via array ref should take 3 elements. Was listed as 6 - Reduced scope creation for more performance improvements 0.5.4 Thu 28 Jul 2022 21:40:32 AEST - Performance improvements - Dispatcher no longer returns an ref to an empty array with non regex matcher types. - Removed superfluous scope creation in dispatcher - Moved my variable out of dispatcher sub - Improved dispatch matching performance - 1.70x approx for static exact matches - 1.15x approx for regex matches 0.5.2 Wed 22 Jun 2022 07:42:37 AEST - Compatibility update for Template::Plex v0.4.2 0.5.1 Sat 2 Apr 2022 21:01:36 AEST - Bump min perl version to 5.26 for @{^CAPTURE} variable - Fixed issue where a cached entry did not return captures - Default matcher type is updated to undef to allow cached matcher to do regex match - Cleaned up tests 0.5.0 Thu 31 Mar 2022 20:15:33 AEST - Major rewrite - Simplified and restricted scope - Table entry stores any scalar value, not just code references - Regex, begin, end, exact and numeric matchers - Dispatcher returns matching table entry and regex captures - Caching always enabled. External management by user application 0.4.1 Mon 7 Mar 2022 17:27:52 AEST - Remove debugging output which should not have been active - Remove more unused code 0.4.0 Sat 5 Mar 2022 10:29:11 AEST - Removed usages of given/when and replaced with if/else/and in generated code - Matching is now always performed via a regex. - Uncached "online" dispatcher gained a 10-20% performance boost - Using Template::Plex template to make the code more readable - Removed unused code 0.3.0 Fri 10 Sep 2021 11:54:43 AEST - First argument to dispatched code ref is table entry not string being matched (< v0.2.3) - Updated test to utilise new first argument - Spelling fixes 0.2.3 Tue 3 Aug 2021 15:19:45 AEST - Added simple two element entry add - Constructor can take default handler directly - Spelling fixes 0.2.2 - Fix error in existing test script - Added more comprehensive tests - Check for valid cache (hash ref) when adding entry - Check for defined matcher when adding entry - Allow adding a 'flattened' entry (4 element) 0.2.1 Wed 23 Jun 2021 15:42:57 AEST - Attempting to fix Tester errors. - Updated min perl version => 5.24 - Added missing dep common::sense 0.2 Tue 22 Jun 2021 21:32:35 AEST - Spelling correction - Documentation formatting and fixes - Removal of unused exporting code - Adding missing dependencies on enum in Makefile.PL - Added MYMETA to distribution 0.1 Tue 22 Jun 2021 13:13:05 AEST - First release almost ready for CPAN