On Wed, 18 Jun 2003 21:31:21 +0200, allan juul wrote:

>while (<FILE>) {
>  s/<(word1|word2|etc|word12)>/<newword="$1"/g;
>  s/</(word1|word2|etc|word12)>/</<newword>/g;
>  print NEWFILE;
>}
>
>
>this works fine but is very very slow am sure because of the alternation in the 
>reg exp.

>anyway, does anyone have a better/faster approach 

The CPAN module Regex::PreSuf, see
<http://search.cpan.org/author/JHI/Regex-PreSuf-1.15/PreSuf.pm>, can
serve to generate a way to produce a, hopefully faster, alternative for
your regex. It's worth a try. First you generate a string containing the
regex from the wordlist:

        use Regex::PreSuf;
        my $re = presuf(qw(word1 word2 etc word12));

and next  you use it in your substitutions like this:

        s/<($re)>/<newword="$1">/og;
        s/<\/$re>/<\/newword>/og;

You might get some extra gain by adding lookahead to your alternatives:

        /(?=[fb])(foo|bar)/

might be faster than plain

        /(foo|bar)/

Maybe.


   HTH,
   Bart.

Reply via email to