Исходная строка выглядит следующим образом:
checksession ok:6178 avg:479 avgnet:480 MaxTime:18081 fail1:19
Последняя часть " fail1: 19 " может появляться 0 или 1 раз.И я попытался сопоставить число после " fail1: ", то есть 19, используя это:
($reg_suc, $reg_fail) = ($1, $2) if $line =~ /^checksession\s+ok:(\d+).*(fail1:(\d+))?/;
Это не работает.Переменная $ 2 пуста, даже если " fail1: 19 " существует.Если я удаляю «?», Он может совпадать, только если существует часть « fail1: 19 ».Переменная $ 2 будет « fail1: 19 ».Но если часть " fail1: 19 " не существует, $ 1 и $ 2 также не совпадают.Это неверно.
Как я могу переписать этот шаблон, чтобы правильно захватить число 2?Это означает, что при наличии части " fail1: 19 " будут записаны два числа, а когда она не выйдет, будет записана только цифра после " ok: ".