You have two nested loops, an outer loop extracting data from the database, and an inner loop iterating over the regexes. This means that each time perl encounters a regex, the regex is different from the previous one - which will cause the regex to be compiled again. You might want to try to loop over the regexes in the outer loop, and over the data in the inner loop.
There's no garantee that it will be faster - your regexes are already compiled, and it might be that re-visiting the database costs too much. It may even be slower.
But it's worth a shot.