Это было бы простое решение:
my $number = grep {/particular word/} grep {/START/../END/} <>;
(Поскольку вы не предоставляете пример кода, я использовал оператор diamond и предположил, что файл журнала передается в качестве аргумента скрипту.Замените на дескриптор файла, если необходимо.)
grep {/START/../END/} <>
создает список элементов внутри и включая разделители, а grep {/particular word/}
работает с этим списком.
С точки зрения производительности выбыло бы лучше с
for (<>) {
$number++ if /START/../END/ and /a/;
}
Обратите внимание, что вы должны использовать and
вместо &&
или обернуть свое выражение триггера в скобках из-за приоритета оператора.оба:
my $number = grep {/START/../END/ and /particular word/} <>;