Jak mogę skutecznie dopasować wiele różnych wzorców regex w Perlu?

Mam rosnącą listę wyrażeń regularnych, których używam do analizowania plików dziennika w poszukiwaniu „interesujących” instrukcji błędów i debugowania. Obecnie dzielę je na 5 wiader, z których większość spada na 3 duże wiadra. Mam do tej pory ponad 140 wzorów, a lista wciąż rośnie.

Większość wyrażeń regularnych jest prosta, ale są też dość wyjątkowe, więc moje możliwości przechwycenia wielu dopasowań za pomocą jednego wzoru są nieliczne. Ze względu na charakter tego, co dopasowuję, wzory wydają się być niejasne i dlatego rzadko się z nimi dopasowują, więc wykonuję TON pracy na każdej linii wejściowej, w wyniku czego nie można dopasować niczego lub pasuje jeden z ogólnych na samym końcu.

Ze względu na ilość danych wejściowych (setki megabajtów plików dziennika) czasami czekam przez minutę lub dwie, aż skrypt się skończy. Stąd moje pragnienie bardziej wydajnego rozwiązania. Nie interesuje mnie jednak rezygnacja z przejrzystości dla szybkości.

Obecnie mam ustawione wyrażenia regularne w następujący sposób:

 if (($line =~ m{Failed in routing out}) ||
  ($line =~ m{Agent .+ failed}) ||
  ($line =~ m{Record Not Exist in DB}) ||
         ...

Czy jest lepszy sposób ustrukturyzowania tego, aby był bardziej wydajny, ale wciąż można go utrzymać? Dzięki!

questionAnswers(8)

yourAnswerToTheQuestion