in reply to grep with looped tests

$final = 0 if ( $r );

You need to change $r to $something =~ $r; Using a regex variable as an expression by itself will not do any matching.

It might be more efficient to drop the loop and build a combined expression like

$something !~ /$r1|$r2|$r3|$r4|.../;
Maybe Regexp::Optimizer can make that long expression even faster.