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 $-, $-, .., $-[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.