NAME Hash::Match - match contents of a hash against rules REQUIREMENTS This module requires Perl v5.10 or newer, and the following non-core modules: List::MoreUtils namespace::autoclean SYNOPSIS use Hash::Match; my $m = Hash::Match->new( rules => { key => qr/ba/ } ); $m->( { key => 'foo' } ); # returns false $m->( { key => 'bar' } ); # returns true $m->( { foo => 'bar' } ); # returns false DESCRIPTION This module allows you to specify complex matching rules for the contents of a hash. METHODS `new' my $m = Hash::Match->new( rules => $rules ); Returns a function that matches a hash reference against the `$rules', e.g. if ( $m->( \%hash ) ) { ... } Rules The rules can be a hash or array reference of key-value pairs, e.g. { k_1 => 'string', # k_1 eq 'string' k_2 => qr/xyz/, # k_2 =~ qr/xyz/ k_3 => sub { ... }, # k_3 exists and sub->($hash->{k_3}) is true } For a hash reference, all keys in the rule must exist in the hash and match the criteria specified by the rules' values. For an array reference, at least one key must exist and match the criteria specified in the rules. Boolean Operators The following special keys allow you to use nested boolean operators: `-not' { -not => $subrules, } Negate the `$subrules'. If `$subrules' is a hash reference, that it is true when not all of the rules match. If `$subrules' is an array reference, then it is true when none of the rules match. `-and' [ -and => \%subrules, ] True if all of the `%subrules' are true. You can also use { -and => \@subrules, } which is useful for cases where the keys of `@subrules' are not strings, e.g. regular expressions. `-or' { -or => \@subrules, } True if at least one of the `@subrules' is true. Regular Expressions for Keys You can use regular expressions for matching keys. For example, -or => [ qr/xyz/ => $rule, ] will match if there is any key that matches the regular expression has a corresponding value which matches the `$rule'. You can also use -and => [ qr/xyz/ => $rule, ] to match if all keys that match the regular expression have corresponding values which match the `$rule'. Note that you cannot use regular expressions as hash keys in Perl. So the following *will not* work: { qr/xyz/ => $rule, } AUTHOR Robert Rothenberg, `' LICENSE AND COPYRIGHT Copyright 2014 Robert Rothenberg. This program is free software; you can redistribute it and/or modify it under the terms of the the Artistic License (2.0). You may obtain a copy of the full license at: http://www.perlfoundation.org/artistic_license_2_0