Why not do real bitwise math?
$byte = 0;
$byte |= 1 if $obj->{organization} =~ /\S/;
$byte |= 1<<1 if $obj->{foo} =~ /\S/;
$byte |= 1<<2 if $obj->{bar} =~ /\S/;
...
$byte |= 1<<7 if $obj->{report} =~ /\S/;
# Here are your checks, rewritten as bitmasks
if ($byte & 1<<7 and not $byte & 7<<1) {
# do more checks against database
} elsif (not $byte & 15<<4 and $byte & 1<<3 and not $byte & 3) {
# do other checks against database
} else {
# produce error message
}
Update: while I was checking my solutions, several people already gave the right answers. Specifically, tye's looks nice to me. I'm leaving this here only for completeness' sake.
-dlc