# don't run this code on every match: the idea is the qr// needs # to be computed only once. my $valid = join "|", map { quotemeta } @valid; my $valid_re = qr/^$valid$/; # now match as many times as you like. print "$_: " . (/$valid_re/ ? "okay" : "not okay") . "\n" for @a_bunch_of_inputs;