| line | true | false | branch | 
 
| 730 | 0 | 9 | unless defined $class | 
 
| 760 | 14 | 63 | ref $_[0] eq 'HTTP::Validate' ? : | 
 
| 771 | 2 | 74 | unless defined $ruleset_name and not ref $ruleset_name and $ruleset_name ne '' | 
 
| 833 | 18 | 42 | ref $_[0] eq 'HTTP::Validate' ? : | 
 
| 890 | 12 | 3 | ref $_[0] eq 'HTTP::Validate' ? : | 
 
| 897 | 5 | 29 | if ($key eq 'allow_unrecognized') { } | 
 
|  | 2 | 27 | elsif ($key eq 'ignore_unrecognized') { } | 
 
|  | 24 | 3 | elsif ($ERROR_MSG{$key}) { } | 
 
| 899 | 5 | 0 | $value ? : | 
 
| 904 | 2 | 0 | $value ? : | 
 
| 938 | 0 | 2 | ref $_[0] eq 'HTTP::Validate' ? : | 
 
| 976 | 0 | 4 | ref $_[0] eq 'HTTP::Validate' ? : | 
 
| 982 | 0 | 4 | unless defined $ruleset_name | 
 
| 985 | 0 | 4 | unless $rs | 
 
| 1011 | 0 | 1 | ref $_[0] eq 'HTTP::Validate' ? : | 
 
| 1017 | 0 | 1 | unless defined $ruleset_name | 
 
| 1020 | 0 | 1 | unless $rs | 
 
| 1043 | 0 | 74 | if $ruleset_name eq '' | 
 
| 1045 | 2 | 72 | if (exists $validator->{'RULESETS'}{$ruleset_name}) | 
 
| 1123 | 16 | 184 | if (not ref $rule) { } | 
 
|  | 0 | 184 | elsif (&reftype($rule) ne 'HASH') { } | 
 
| 1127 | 5 | 11 | if ($rule =~ qr/ ^ ([!^?] | >>?) (.*) /sx) { } | 
 
| 1134 | 1 | 4 | if ($1 eq '>>') { } | 
 
|  | 1 | 3 | elsif ($1 eq '>') { } | 
 
|  | 1 | 2 | elsif ($1 eq '!') { } | 
 
|  | 1 | 1 | elsif ($1 eq '^') { } | 
 
| 1136 | 1 | 0 | if $doc_rule or @doc_lines | 
 
| 1214 | 2 | 4 | unless $DIRECTIVE{$key} or $ERROR_MSG{$key} | 
 
| 1216 | 184 | 139 | if (defined $DIRECTIVE{$key} and $DIRECTIVE{$key} == 2) | 
 
| 1218 | 1 | 183 | if $type | 
 
| 1232 | 95 | 225 | if ($key eq 'valid') { } | 
 
|  | 3 | 222 | elsif ($key eq 'alias') { } | 
 
|  | 4 | 218 | elsif ($key eq 'clean') { } | 
 
|  | 3 | 215 | elsif ($key eq 'default') { } | 
 
|  | 8 | 207 | elsif ($key eq 'split' or $key eq 'list') { } | 
 
|  | 7 | 200 | elsif ($key eq 'error' or $key eq 'errmsg') { } | 
 
|  | 19 | 181 | elsif ($key ne $type) { } | 
 
| 1235 | 0 | 95 | unless $CATEGORY{$type} eq 'param' or $type eq 'content_type' | 
 
| 1241 | 0 | 3 | unless $CATEGORY{$type} eq 'param' | 
 
| 1243 | 0 | 3 | if ref $value and ref $value ne 'ARRAY' | 
 
| 1246 | 1 | 2 | ref $value ? : | 
 
| 1252 | 0 | 4 | unless $CATEGORY{$type} eq 'param' | 
 
| 1257 | 0 | 4 | unless ref $rr->{'cleaner'} eq 'CODE' | 
 
| 1263 | 0 | 3 | unless $CATEGORY{$type} eq 'param' | 
 
| 1271 | 0 | 8 | unless $CATEGORY{$type} eq 'param' | 
 
| 1273 | 0 | 8 | if ref $value and ref $value ne 'Regexp' | 
 
| 1282 | 7 | 1 | unless (ref $value) | 
 
| 1288 | 5 | 3 | if $key eq 'list' | 
 
| 1298 | 0 | 19 | if ref $value | 
 
| 1304 | 0 | 181 | unless $type | 
 
| 1311 | 176 | 5 | if ($CATEGORY{$type} ne 'modifier') | 
 
| 1335 | 131 | 50 | if ($CATEGORY{$type} eq 'param') { } | 
 
|  | 5 | 45 | elsif ($CATEGORY{$type} eq 'modifier') { } | 
 
|  | 31 | 14 | elsif ($CATEGORY{$type} eq 'include') { } | 
 
|  | 10 | 4 | elsif ($CATEGORY{$type} eq 'constraint') { } | 
 
|  | 4 | 0 | elsif ($type eq 'content_type') { } | 
 
| 1342 | 1 | 130 | unless defined $typevalue and not ref $typevalue and $typevalue ne '' | 
 
| 1347 | 3 | 127 | ref $rule->{'valid'} eq 'ARRAY' ? : | 
 
| 1351 | 6 | 126 | if (defined $v and $VALIDATOR_DEF{$v}) { } | 
 
|  | 87 | 39 | elsif (defined $v) { } | 
 
| 1353 | 2 | 4 | if $v eq 'FLAG_VALUE' | 
 
| 1354 | 2 | 4 | if $v eq 'FLAG_VALUE' | 
 
| 1359 | 2 | 85 | unless ref $v and &reftype($v) eq 'CODE' | 
 
| 1366 | 28 | 100 | if $type eq 'optional' or $type eq 'mandatory' | 
 
| 1368 | 104 | 24 | if ($type ne 'optional') | 
 
| 1370 | 104 | 0 | unless $rs->{'params'}{$typevalue} | 
 
| 1380 | 3 | 125 | if (defined $rr->{'default'}) | 
 
| 1382 | 0 | 3 | if ref $rr->{'default'} | 
 
| 1385 | 1 | 2 | unless ref $rr->{'validators'} eq 'ARRAY' and @{$rr->{'validators'};} | 
 
| 1391 | 0 | 2 | unless defined $result | 
 
| 1393 | 1 | 1 | if (exists $result->{'value'}) | 
 
| 1396 | 0 | 1 | if ref $rr->{'default'} | 
 
| 1410 | 4 | 1 | ref $typevalue eq 'ARRAY' ? : | 
 
| 1420 | 0 | 5 | unless @{$rr->{'param'};} > 0 | 
 
| 1426 | 6 | 25 | if $type eq 'require' | 
 
| 1429 | 1 | 29 | unless defined $typevalue and not ref $typevalue and $typevalue ne '' | 
 
| 1432 | 1 | 28 | unless defined $self->{'RULESETS'}{$typevalue} | 
 
| 1443 | 0 | 10 | unless defined $typevalue and ref $typevalue eq 'ARRAY' | 
 
| 1448 | 0 | 20 | unless defined $arg and $arg ne '' | 
 
| 1450 | 0 | 20 | unless defined $rs->{'includes'}{$arg} | 
 
| 1455 | 0 | 10 | unless @{$rr->{'ruleset'};} > 0 | 
 
| 1465 | 0 | 4 | if ref $typevalue or not $typevalue =~ /\w/ | 
 
| 1467 | 4 | 0 | ref $rule->{'valid'} eq 'ARRAY' ? : | 
 
| 1471 | 0 | 10 | if ($t eq '') | 
 
| 1480 | 1 | 9 | unless $long | 
 
| 1483 | 0 | 9 | if defined $rr->{'type_map'}{$short} | 
 
| 1489 | 0 | 3 | unless $rr->{'type_map'} | 
 
| 1527 | 66 | 172 | unless defined $rr or @lines | 
 
| 1533 | 1 | 171 | if @lines and $lines[0] =~ /^[!]/ | 
 
| 1538 | 1 | 165 | if defined $rr and $rr->{'undocumented'} | 
 
| 1557 | 4 | 11 | if ($body ne '') | 
 
| 1559 | 0 | 4 | if $last_pod or $this_pod | 
 
| 1571 | 5 | 165 | if (not defined $rr) { } | 
 
|  | 125 | 40 | elsif (defined $rr and $rr->{'type'} eq 'param') { } | 
 
|  | 27 | 13 | elsif (defined $rr and $rr->{'type'} eq 'include') { } | 
 
| 1574 | 5 | 0 | if defined $body | 
 
| 1583 | 125 | 0 | if defined $body | 
 
| 1596 | 1 | 26 | if ($body ne '') | 
 
| 1599 | 1 | 0 | if defined $body | 
 
| 1619 | 0 | 0 | if ($1 eq '=over') { } | 
 
|  | 0 | 0 | elsif ($1 eq '=back') { } | 
 
|  | 0 | 0 | elsif ($1 eq '=item') { } | 
 
|  | 0 | 0 | elsif ($1 eq '=head') { } | 
 
| 1627 | 0 | 0 | if $list_level < 0 | 
 
| 1632 | 0 | 0 | if $list_level == 0 | 
 
| 1637 | 0 | 0 | if $list_level > 0 or $item_body | 
 
| 1659 | 0 | 6 | if $state->{'processed'}{$rs->{'name'}} | 
 
| 1669 | 0 | 6 | unless ref $rs and ref $rs->{'doc_items'} eq 'ARRAY' | 
 
| 1678 | 10 | 28 | if (ref $item and defined $item->{'param'}) { } | 
 
|  | 8 | 20 | elsif ($item =~ qr/ ^ =ORDINARY /x) { } | 
 
|  | 2 | 18 | elsif ($item =~ qr/ ^ =INCLUDE \s* (.*) /sx) { } | 
 
| 1680 | 5 | 5 | unless ($state->{'in_list'}) | 
 
| 1682 | 2 | 3 | if $doc ne '' | 
 
| 1694 | 3 | 5 | if ($state->{'in_list'}) | 
 
| 1696 | 3 | 0 | if $doc ne '' | 
 
| 1708 | 2 | 0 | if (ref $included_rs eq 'HTTP::Validate::Ruleset') | 
 
| 1712 | 2 | 0 | if $doc ne '' and $subdoc ne '' | 
 
| 1713 | 2 | 0 | if $subdoc ne '' | 
 
| 1721 | 14 | 4 | if $doc ne '' and $item ne '' | 
 
| 1730 | 4 | 2 | if (--$state->{'level'} == 0) | 
 
| 1732 | 2 | 2 | if $state->{'in_list'} | 
 
| 1752 | 0 | 3 | if $uniq->{$rs_name} | 
 
| 1758 | 5 | 2 | if ($rule->{'type'} eq 'param') { } | 
 
|  | 2 | 0 | elsif ($rule->{'type'} eq 'include') { } | 
 
| 1784 | 0 | 60 | if defined $context and !ref($context) || &reftype($context) ne 'HASH' | 
 
| 1787 | 0 | 60 | unless defined $context | 
 
| 1789 | 0 | 60 | unless ref $input_params | 
 
| 1796 | 29 | 31 | if (&reftype($input_params) eq 'HASH') { } | 
 
|  | 31 | 0 | elsif (&reftype($input_params) eq 'ARRAY') { } | 
 
| 1824 | 0 | 72 | if (ref $p) { } | 
 
| 1867 | 0 | 78 | if (ref $hash->{$param} and &reftype($hash->{$param}) eq 'ARRAY') { } | 
 
|  | 3 | 75 | elsif (defined $hash->{$param} and $hash->{$param} ne '') { } | 
 
| 1869 | 0 | 0 | ref $value && &reftype($value) eq 'ARRAY' ? : | 
 
| 1878 | 0 | 3 | ref $value && &reftype($value) eq 'ARRAY' ? : | 
 
| 1900 | 0 | 60 | unless defined $ruleset_name and $ruleset_name ne '' | 
 
| 1901 | 0 | 60 | if ref $ruleset_name or not $ruleset_name =~ /\w/ | 
 
| 1912 | 1 | 59 | if ($vr->{'rs'}{$ruleset_name} != 2) | 
 
| 1915 | 1 | 0 | @names == 1 ? : | 
 
| 1939 | 3 | 1 | if defined $vr->{'content_type'} and $vr->{'content_type'} ne '' and $vr->{'content_type'} ne 'unknown' | 
 
| 1952 | 8 | 52 | if $self->{'SETTINGS'}{'ignore_unrecognized'} | 
 
| 1956 | 105 | 4 | if exists $vr->{'ps'}{$key} or exists $vr->{'ig'}{$key} | 
 
| 1958 | 2 | 2 | if ($self->{'SETTINGS'}{'permissive'}) { } | 
 
| 1984 | 0 | 82 | unless defined $ruleset_name | 
 
| 1990 | 0 | 82 | unless ref $rs | 
 
| 1995 | 0 | 82 | if exists $vr->{'rs'}{$ruleset_name} | 
 
| 2000 | 35 | 47 | unless ref $rs->{'fulfill_order'} and @{$rs->{'fulfill_order'};} | 
 
| 2016 | 170 | 44 | if ($type eq 'param') { } | 
 
|  | 0 | 44 | elsif ($rr->{'type'} eq 'ignore') { } | 
 
|  | 12 | 32 | elsif ($rr->{'type'} eq 'together' or $rr->{'type'} eq 'at_most_one') { } | 
 
|  | 22 | 10 | elsif ($rr->{'type'} eq 'include') { } | 
 
|  | 6 | 4 | elsif ($rr->{'type'} eq 'constraint') { } | 
 
|  | 4 | 0 | elsif ($type eq 'content_type') { } | 
 
| 2022 | 0 | 170 | if $vr->{'ig'}{$key} | 
 
| 2029 | 62 | 115 | unless exists $vr->{'raw'}{$name} | 
 
| 2032 | 116 | 2 | if defined $_ | 
 
|  | 3 | 112 | ref $v eq 'ARRAY' ? : | 
 
| 2035 | 115 | 0 | unless exists $vr->{'ps'}{$name} | 
 
| 2042 | 1 | 169 | if (keys %names_found > 1 and not $rr->{'multiple'}) { } | 
 
|  | 0 | 169 | elsif (exists $vr->{'clean'}{$key}) { } | 
 
|  | 1 | 168 | elsif (not @raw_values and exists $rr->{'default'}) { } | 
 
|  | 2 | 331 | elsif (@raw_values > 1 and not $rr->{'multiple'}) { } | 
 
| 2081 | 20 | 146 | if ($rr->{'split'}) | 
 
| 2085 | 22 | 0 | if defined $_ | 
 
| 2093 | 2 | 1 | if ($rr->{'flag'} and keys %names_found and not @raw_values) | 
 
| 2101 | 67 | 99 | unless (@raw_values) | 
 
| 2104 | 2 | 65 | if $rr->{'mandatory'} | 
 
| 2120 | 40 | 71 | unless ($rr->{'validators'}) | 
 
| 2122 | 40 | 0 | if (defined $raw_val and $raw_val ne '') | 
 
| 2124 | 4 | 36 | if ref $rr->{'cleaner'} eq 'CODE' | 
 
| 2145 | 4 | 67 | unless ref $result and &reftype($result) eq 'HASH' | 
 
| 2151 | 42 | 25 | unless $result->{'error'} | 
 
| 2157 | 25 | 42 | if (ref $result and $result->{'error'}) | 
 
| 2163 | 8 | 17 | if ($rr->{'warn'}) { } | 
 
| 2166 | 0 | 8 | $rr->{'warn'} ne '1' ? : | 
 
| 2186 | 1 | 41 | if (ref $result and $result->{'warn'}) | 
 
| 2195 | 41 | 5 | ref $result && exists $result->{'value'} ? : | 
 
| 2200 | 0 | 46 | if ref $rr->{'cleaner'} eq 'CODE' | 
 
| 2209 | 78 | 21 | if (@clean_values) { } | 
 
| 2213 | 7 | 71 | if ($rr->{'multiple'}) { } | 
 
| 2231 | 2 | 19 | if (defined $rr->{'bad_value'} and $rr->{'bad_value'} eq 'ERROR') { } | 
 
|  | 1 | 18 | elsif (defined $rr->{'bad_value'}) { } | 
 
| 2241 | 1 | 0 | $rr->{'multiple'} ? : | 
 
| 2253 | 22 | 77 | $error_flag ? : | 
 
| 2260 | 77 | 22 | unless ($rr->{'optional'}) | 
 
| 2305 | 1 | 11 | if ($rr->{'type'} eq 'together' and @present > 0 and @present < @{$rr->{'param'};}) { } | 
 
|  | 2 | 13 | elsif ($rr->{'type'} eq 'at_most_one' and @present > 1) { } | 
 
| 2336 | 1 | 21 | if ($rr->{'require'} and not $vr->{'rs'}{$rs_name} == 2) | 
 
| 2342 | 0 | 1 | @missing == 1 ? : | 
 
| 2360 | 4 | 2 | if (@fulfilled == 0 and $rr->{'constraint'} eq 'require_one' || $rr->{'constraint'} eq 'require_any') { } | 
 
|  | 2 | 0 | elsif (@fulfilled > 1 and $rr->{'constraint'} eq 'allow_one' || $rr->{'constraint'} eq 'require_one') { } | 
 
| 2368 | 0 | 4 | @missing == 1 ? : | 
 
| 2385 | 4 | 0 | if ref $self->{'RULESETS'}{$rs}{'fulfill_order'} eq 'ARRAY' | 
 
| 2406 | 3 | 1 | if ($rr->{'type_map'}{$value}) { } | 
 
| 2434 | 0 | 14 | if exists $scratch->{$arg} | 
 
| 2454 | 17 | 17 | if ($msg =~ qr/^ERR_/) | 
 
| 2465 | 0 | 8 | $rr->{'type'} eq 'content_type' ? : | 
 
|  | 24 | 8 | $rr->{'type'} eq 'param' ? : | 
 
|  | 2 | 32 | $rr->{'key'} ? : | 
 
| 2493 | 1 | 10 | if ($msg =~ qr/^ERR_/) | 
 
| 2504 | 0 | 2 | $rr->{'type'} eq 'content_type' ? : | 
 
|  | 9 | 2 | $rr->{'type'} eq 'param' ? : | 
 
|  | 0 | 11 | $rr->{'key'} ? : | 
 
| 2523 | 0 | 11 | if $rr->{'errmsg'} | 
 
| 2525 | 2 | 9 | if ($rr->{'warn'}) { } | 
 
| 2527 | 1 | 1 | if $rr->{'warn'} ne '1' | 
 
| 2548 | 42 | 4 | if (ref $value) { } | 
 
|  | 4 | 0 | elsif (defined $value and not $value =~ /^'/) { } | 
 
| 2550 | 42 | 0 | if (&reftype($value) eq 'ARRAY') { } | 
 
|  | 0 | 0 | elsif (&reftype($value) eq 'HASH') { } | 
 
| 2570 | 46 | 0 | if defined $value and $value ne '' | 
 
| 2583 | 0 | 42 | unless @names | 
 
| 2607 | 2 | 5 | if ref $self->{'er'} eq 'ARRAY' and @{$self->{'er'};} | 
 
| 2629 | 20 | 30 | if (not wantarray) { } | 
 
|  | 4 | 26 | elsif (defined $key) { } | 
 
| 2631 | 4 | 16 | defined $key ? : | 
 
|  | 12 | 8 | unless defined $key ? ref $self->{'ec'} : ref $self->{'er'} | 
 
| 2632 | 3 | 5 | defined $key ? : | 
 
| 2640 | 1 | 3 | unless ref $self->{'ec'} | 
 
| 2679 | 18 | 11 | if (not wantarray) { } | 
 
|  | 2 | 9 | elsif (defined $key) { } | 
 
| 2681 | 2 | 16 | defined $key ? : | 
 
|  | 12 | 6 | unless defined $key ? ref $self->{'wc'} : ref $self->{'wn'} | 
 
| 2682 | 2 | 4 | defined $key ? : | 
 
| 2690 | 0 | 2 | unless ref $self->{'wn'} | 
 
| 2853 | 9 | 34 | unless ($value =~ /^([+-]?\d+)$/) | 
 
| 2858 | 7 | 27 | if (defined $min and $value < $min) | 
 
| 2860 | 5 | 0 | $min == 1 ? : | 
 
|  | 1 | 5 | $min == 0 ? : | 
 
|  | 1 | 6 | defined $max ? : | 
 
| 2868 | 1 | 26 | if (defined $max and $value > $max) | 
 
| 2870 | 1 | 0 | defined $min ? : | 
 
| 2882 | 1 | 14 | unless not defined $min or $min =~ /^[+-]?\d+$/ | 
 
| 2883 | 0 | 14 | unless not defined $max or $max =~ /^[+-]?\d+$/ | 
 
| 2885 | 8 | 6 | unless defined $min or defined $max | 
 
| 2919 | 1 | 13 | unless ($value =~ /^[+-]?(?:\d+\.\d*|\d*\.\d+|\d+)(?:[eE][+-]?\d+)?$/) | 
 
| 2924 | 4 | 4 | if (defined $min and defined $max and $value < $min || $value > $max) | 
 
| 2929 | 0 | 9 | if (defined $min and $value < $min) | 
 
| 2934 | 0 | 9 | if (defined $max and $value > $max) | 
 
| 2946 | 1 | 14 | if defined $min and not &looks_like_number($min) | 
 
| 2947 | 0 | 14 | if defined $max and not &looks_like_number($max) | 
 
| 2949 | 8 | 6 | unless defined $min or defined $max | 
 
| 2970 | 4 | 3 | if $value =~ /$pattern/ | 
 
| 2978 | 2 | 8 | unless defined $pattern and !ref($pattern) || ref $pattern eq 'Regexp' | 
 
| 2981 | 4 | 4 | ref $pattern ? : | 
 
| 3011 | 4 | 1 | if exists $accepted->{$folded} | 
 
| 3024 | 0 | 9 | unless defined $k and $k ne '' | 
 
| 3026 | 0 | 9 | if ($k eq '#') | 
 
| 3033 | 9 | 0 | unless $undoc | 
 
| 3037 | 1 | 4 | unless keys %accepted | 
 
| 3059 | 2 | 0 | unless (ref $value) | 
 
| 3061 | 2 | 0 | if ($value =~ /^(?:1|yes|true|on)$/i) { } | 
 
|  | 0 | 0 | elsif ($value =~ /^(?:0|no|false|off)$/i) { } |