Spreadsheet::ParseExcelでout of memory!

全部で1500個くらいあるExcelファイルからデータを抽出し、RDBに登録する処理があって、Spreadsheet::ParseExcelを使っていたら、150個目あたりを処理するところで
out of memory!になった。
Solaris環境でtopコマンドでプロセスのメモリ状況をみたら、ファイルを1個処理する毎に使用メモリが増えていく。原因を調べたら、

my $oBook = $oExcel->Parse("$DOCUMENT_DIR/$XLS_FILE", $formatJ);

このParse()の先の処理(OLEあたり)にあるようだ。引数をファイル名でなく、ファイルハンドルやファイルのコンテンツで渡しても、やはり同様。WindowsXPMacOSXでも再現。

とりあえず、コマンドライン引数でファイル名を渡してファイルを1個処理するスクリプトと、これをsystem()で呼び出すメインループのスクリプトに分割することで対応することにした。