Hi all, thanks a lot for all the responses. Jeff's explanation of the snippet I mentioned in my original message did the trick. The hash-based solution is much faster now, although the first attempt (using multiple replacements on standard input) is still the fastest.
To answer John's questions: >Your regular expressions look like they are longer then 8 bits. > >> >#!/usr/bin/perl -pw >> > >> >s/Ã??/{\\glqq}/g; >> >s/Ã??/{\\grqq}/g; This is due to mail encodings, they are really 8-bit characters. >Do you want the fastest code? The shortest code? The most maintainable >code? What are you trying to accomplish? Since I already had a reasonably fast and short solution, I wanted a more maintainable one, were I could easily extend the range of characters by editing the hash. The hash solution is still a little sluggish, but it's more elegant, I think. Jeff 'japhy' Pinyan wrote: >Let me explain this for you, and fix it, too. > > # this produces 'key1|key2|key3|...' > my $re = join '|', > map quotemeta($_), # this escapes non-alphanumberic > # characters; > sort { length($b) <=> length($a) } # sorts by length, biggest first > keys %enctabelle; # the strings to encode > >What this does is put the keys in a string, separated by a | (which means >"or" in a regex), quotemeta()d (which ensures any regex characters in them >are properly escaped), and ordered by length (longest to shortest). That >last part is important: if you have keys 'a' and 'ab', you want to try >matching 'ab' BEFORE you try matching 'a', or else 'ab' will NEVER be >matched. > I omitted the sort command since all patterns consist of a single (8-bit) character, so I guess your caveat is not applicable. My original message was garbled (see above). Thanks again, Jan -- Hanlon's Razor: Never attribute to malice that which can be adequately explained by stupidity. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>