Я пытаюсь найти способ распечатать индикатор прогресса в командной строке при разборе файлов журнала. Get logfiles => foreach file => foreach line {do}.Печать не работает, пока итерации идут внутри цикла foreach
Идея: я хочу напечатать часть индикатора прогресса в каждом цикле «foreach file». Meaing: распечатайте весь столбец, если вы просто разбираете 1 файл. напечатайте половину строки для каждого файла, когда вы разберете 2 файла и так далее. Вы находите конкретный код внизу.
Проблема: Выход (печать «*») печатается после того, как все операции foreach завершены, а не между ними. Подробности указаны в Кодексе.
Есть ли у кого-нибудь идеи, как печатать внутри foreach? Или может сказать мне проблему? Я не понимаю :(.
my @logfiles=glob($logpath);
print "<------------------>\n";
$vari=20/(scalar @logfiles);
foreach my $logfile (@logfiles){
open(LOGFILEhandle, $logfile);
@lines = <LOGFILEhandle>;
print "*" x $vari; #won't work, only after loop. Even a "print "*";" doesn't work
foreach my $line (@lines){
#print "*"; works "in between". print "*" x $vari; does not.
if ($line=~/xyz/){
......
......
}
close(LOGFILEhandle);
}
}
попробуйте 'print '*" x $ vari, "\ n"; 'или установите' $ | = 1'. Возможно, вы [страдали от буферизации] (http://perl.plover.com/FAQs/Buffering.html). – PerlDuck