次のコードを使用して、かなり大きな xml ファイル (> 50GB) を解析しています。
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() 現在位置を確認し、出力します。