Just to situate the historical context, I added the if defined $cond much later on in the piece, when I added the IGNORE() function to change an AND() or an OR() into a no-op.
The idea was to ensure that "valid1", "valid2", undef, "valid3" produces a syntactically correct query, without a fourth half-baked conditional creeping in there.
But you know what? You're absolutely correct. Given the above and the following:
sub _joiner {
my $op = shift;
my $filter = shift;
while (my $cond = shift) {
$filter = "($op $filter $cond)";
}
return $filter;
}
my $filter = AND(
"(a=1)",
IGNORE(
"(b=1)",
"(b=2)",
),
"(c=1)",
);
It does indeed produce (& (a=1) (c=1)). Thank-you very much for this insight, I appreciate it.
• another intruder with the mooring in the heart of the Perl
|