in reply to Set Combination

Note that an empty string is equivalent to a 'false' value, while a populated one is 'true' (unless it evaluates to a numeric zero). You can also get rid of your !'s by reversing your AND/OR tests and negating the original terms:
sub chkfmt { if ((!$DISCPCNT || !$DISCDAYSDUE || !$NETDAYSDUE || $NETDUEDATE || +$TERMSDISCAMT) || (!$DISCDUEDATE || !$TERMSDISCAMT || $DISCPCNT || $DISCDAYSDUE | +| $NETDUEDATE || $NETDAYSDUE) || (!$DISCPCNT || !$DISCDUEDATE || $DISCDAYSDUE || $NETDUEDATE || +$NETDAYSDUE || $TERMSDISCAMT)) { print TSERROUT "..."; } }
Note that with all of these negation reversals in my head, I might have messed up your original logic. Take a look at that and see if you can follow it, making corrections as appropriate. Even if I got everything right in the translation, the code above still may not match what you're wanting if your original code was broken to begin with. Hope this helps.