Windows (или NTFS ... или как Perl реализует open в Windows ... не совсем уверен) имеет обязательную блокировку, свернутую в open (). Если вы откроете файл для чтения, другие не смогут открыть его для записи. Если вы откроете файл для записи, другие не смогут открыть его для чтения или записи.
Вы держите файл открытым для чтения, поэтому никто не может писать в журнал. Я думаю, что это то, что происходит. File :: Tail, вероятно, не учитывает это. Он работает вообще, потому что File :: Tail, кажется, время от времени закрывает и снова открывает дескриптор файла, если он не видит никаких действий, он предполагает, что он был усечен или воссоздан заново. Это снимет блокировку и позволит другим файлам проскользнуть для записи.
Вы можете проверить это, открыв файл для чтения одним процессом Perl, а затем попытайтесь открыть его для добавления другим.
Я считаю, что один из способов справиться с этим - открыть файл журнала, используя специальные функции Windows, которые позволяют вам контролировать поведение блокировки. Win32 :: SharedFileOpen похоже, что дело.
fsopen(my $fh, $file, 'r', SH_DENYNO) or
die "Can't read '$file' with no locks: $!\n";
Это откроет файл для чтения без блокировок. К сожалению, вы несете ответственность за выполнение остальной части работы. perlfaq может помочь.