Вы не знаете количество строк, пока не обработаете их все. Итак, сохраните вывод в буфере и распечатайте его в конце обработки файла:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
open my $fh, '<', 'log' or die $!;
my @buffer;
while (<$fh>) {
next if $. < 3;
if (/^([0-9]+) rows selected\.$/) {
die "Wrong number of rows reported: $1, seen ", scalar @buffer
if $1 != @buffer;
} else {
push @buffer, [ split ' ' ];
}
}
for (@buffer) {
say join "\t", @$_, scalar @buffer;
}
или обработайте файл дважды. В первом запуске просто посчитайте строки, во втором напечатайте их одну за другой, добавив счет:
open my $fh, '<', 'log' or die $!;
1 while <$fh>;
my $size = $. - 3;
seek $fh, $. = 0, 0;
while (<$fh>) {
next if $. < 3;
if (/^([0-9]+) rows selected\.$/) {
die "Wrong number of rows reported: $1, seen ", $size
if $1 != $size;
} else {
say join "\t", split(' '), $size;
}
}