Add check for scalar context in find_directive_elements
authorJacob Bachmeyer <jcb@gnu.org>
Sat, 12 Nov 2022 02:24:28 +0000 (20:24 -0600)
committerJacob Bachmeyer <jcb@gnu.org>
Sat, 12 Nov 2022 02:24:28 +0000 (20:24 -0600)
This avoids building a list when the only important detail is whether a key
is present in the directive.

gatekeeper.pl

index 3822701564342c344a0de73921036e32e76a1e7b..e57e5fcbad32864391eaf079abfafba812df560e 100755 (executable)
@@ -1434,19 +1434,28 @@ sub read_directive_from_string {
 
 =item @values = find_directive_elements ( $directive, $key )
 
+=item $count = find_directive_elements ( $directive, $key )
+
 Search the DIRECTIVE arrayref for KEY elements and return their associated
 values.  An empty list is returned if no KEY elements are found in
 DIRECTIVE.  The KEY comparison is case-insensitive.
 
 The values returned from this procedure are tainted.
 
+In scalar context, return the number of entries that would be returned in
+list context.
+
 =cut
 
 sub find_directive_elements {
   my $directive = shift;
   my $key = lc shift;
 
-  return map $_->[1], grep lc($_->[0]) eq $key, @$directive;
+  if (wantarray) {
+    return map $_->[1], grep lc($_->[0]) eq $key, @$directive;
+  } else {
+    return grep lc($_->[0]) eq $key, @$directive;
+  }
 }
 
 =item $directory = find_directory ( $directive )