in reply to using logical in if statement

It's only testing whether $q->param('intrests') (sic) doesn't match a vertical bar. For all the other values, it's testing whether they're false (empty string or zero).

This is a pretty awful way to structure an ifbut to get the effect you want you'd have to do:

if ($q->param('name') =~ /\|/ || $q->param('site') =~ /\|/ || $q->param('siteid') =~ /\|/ # and so on.... ) { # whatever...
It'd be much nicer to do:
foreach my $p (qw(name site siteid ...)) { if ($q->param($p) =~ /\|/) { error("$p has a vertical bar, that's bad"); # or something } }
HTH