http://qs321.pair.com?node_id=429692

albert.llorens has asked for the wisdom of the Perl Monks concerning the following question:

Hi,

I need to do massive regexp search and replace. For a given text file, I need to go through each line of this file and apply each of the (different) replacement expressions listed in a Perl script (or a separate data file). The whole thing is not too complex to implement. The problem is my replacement expressions may amount to thousands, in which case all several implementations I have tried are extremely slow.

Here is a sample implementation of mine:
open(IN, "<samplein.txt"); my @INPUT = <IN>; close (IN); open (OUT,">sampleout.txt"); foreach $INline (@INPUT) { foreach my $Rpatt (@Patts) { (my $Source, my $Target) = split(/\t/, $Rpatt); if ($Source && $Target) { $Source = $Source; $Target = "\"$Target\""; $INline =~ s/$Source/$Target/gee); } } chomp $INline; print OUT $INline; } close (OUT);

This implementation does the job, but when the list of replacement patterns (@Patts) is big (several thousands), the replacement takes ages.

Can anyone help me find an efficient implementation.