in reply to Re: convert string into a match pattern
in thread convert string into a match pattern

Hello Dave

Many Thanks for your comment to make if more efficient. One additional question:

If I do it in your way and combine the search for all strings, is there a simlple possibility to get also the string index in case of a match ?

e.g. 0 for a match with 'nnxx.yy2 = 234 abc', 1 for a match with 'foo bar = 39 baz *',....

Thanks

  • Comment on Re^2: convert string into a match pattern

Replies are listed 'Best First'.
Re^3: convert string into a match pattern
by dave_the_m (Monsignor) on Dec 22, 2017 at 09:05 UTC
    is there a simlple possibility to get also the string in index in case of a match
    Not that I can immediately think of. Less simple techniques depend on whether you expect most lines to match at least one of the strings, or for most lines to be rejected. If the latter, then you can use my suggested join'|' technique to quickly reject most lines, then use a slower technique only on the matching lines to find which string matched. For example you could generate a second pattern which includes captures, e.g. /(string1)|(string2)|..../ and apply it to matched lines, then see what is the first non-undef value out of $-[1], $-[2], .., $-[N]. This pattern is less efficient than /string1|string2|.../ as it isn't internally compiled into a trie and thus has to check every string in in turn, which is slow for many strings.

    Dave.