On 4/26/05, Craig Moynes <[EMAIL PROTECTED]> wrote: > Hi All, > I am using the spreadsheet::parseexcel module to open up a series (31) > spreadsheets and grab the row counts. > > Here is an excerpt with the ParseExcel Code. > > my $oBook; > my $oWks; > foreach $hashEntry ( @LOGS ) > { > > my ( $localfile) = $hashEntry->{name}; > my ( $err_msg ) = ""; # error message variable > > my $cmd = ""; > > # > # Get row count of each file, to generate results file > # > $oBook = new Spreadsheet::ParseExcel::Workbook->Parse($localfile); > my ($iR, $iC, $oWkS, $oWkC); > $oWkS = ${$oBook->{Worksheet}}[0]; > > print "------ SHEET: ".$oWkS->{Name}. "\n"; > print "Row: ".$oWkS->{MinRow}." v ".$oWkS->{MaxRow}."\n"; > $resultMessage.=basename($localfile).",".$oWkS->{MaxRow}."\n"; > } > > The problem I am running into is after 10 files (in testing all 31 files > are the same source file with different names), and then I get an out of > memory error. Anyone have any idea how I can clean out the memory. I > have a feeling it might be some autocaching or something not getting > cleaned up within ParseExcel. > > Cheers, > Craig
$ResultMessage contains a reference to the ParseExcel object, so the object never goes out of scope, and each iteration through the block places a new object in memory. See Persistent Private Variables in perldoc perlsub, as well as perlboot, etc. You need to completel finish with the object before the block exits. Try, $resultMessage.= sprintf("$s,%s\n", basename($localfile), $oWkS->{MaxRow}) ; or something similar. HTH, Jay -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>