Я использую следующий код для анализа довольно большого XML-файла (> 50 ГБ):
use XML::Parser;
my $p = new XML::Parser(
'Handlers' => {
'Start' => \&handle_start,
'End' => \&handle_end,
'Char' => \&handle_char,
}
);
$p->parsefile( 'source.xml' );
...
sub handle_start {
...
}
Проблема в том, что анализ занимает очень много времени, и я хотел бы получить какой-то индикатор прогресса.
Я бы предпочел способ, который не требует сначала сканирования всего файла только для получения общего количества - так, например, текущая позиция во входном файле была бы идеальной, потому что я мог бы просто проверить в начале общий размер файла, а затем в handle_start() проверяет текущую позицию и печатает ее.