From the "gratuitous use of grep" club...
$string = "$a where " . join ' and ',grep {$_} ($b,$c);
Explanation: Read this from right-to-left.
The
grep takes as arguments a block of code
(or a sub) and a list of items and return just the items
in the list which the block of code is true for. In this
case, the block of code is simply
$_, so grep
returns all items in the list
($b,$c) which are
true (not undef, '', 0, or '0'). The
join then takes those
true items, and combines that list with ' and '. If there
only one item, join omits the ' and '. It then concatenates
the resulting string of 'where' clauses to the string formed by
"$a where ", to get the resulting string.