Использование регулярного выражения для решения этой проблемы предполагает, что у вас есть файл журнала в одной переменной.При условии, что ваш файл журнала не очень большой, вы можете сделать это следующим образом:
use File::Slurp qw(slurp);
my $log = slurp('path/to/logfile');
Или, если вы предпочитаете не использовать нестандартный модуль Perl для этого:
{
local $/;
open my $fh, '<', 'path/to/logfile' or die $!;
my $log = <$fh>;
close $fh;
}
Чтобы получить случаи, когда слово после передачи соответствует слову «connect», но только там, где поток menu -> transfer -> ...
, вы можете сделать следующее:
while ( $log =~ m{menu\s+transfer\s+(\w*connect\w*)}g ) {
print "transfer -> $1\n";
}