Ok perlers, It was actually fairly easy.  

I added a delete just before the end of the for loop.
delete $oBook->{Worksheet};

Not sure how the references work internally in Perl.  I guess that
when oBook is assigned a new Spreadsheet the previous Spreadsheet is
not getting cleaned up.

Cheers,

On 4/27/05, Craig Moynes <[EMAIL PROTECTED]> wrote:
> Hi Gents,
>    I tried both suggestions:
> 
> #
> # For each log in the array
> #       - grab the directory and name of the file.
> #       - send via sendmail
> #
> 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
>         #
>         my $oBook = new Spreadsheet::ParseExcel::Workbook->Parse($localfile);
>         my $oWkS = ${$oBook->{Worksheet}}[0];
> 
>         print "------ SHEET: ".$oWkS->{Name}. "\n";
>         print "Row: ".$oWkS->{MinRow}." v ".$oWkS->{MaxRow}."\n";
>         
> $resultMessage.=sprintf("%s,%s\n",basename($localfile),$oWkS->{MaxRow});
> }
> 
> But I still get an out of memory error on the 10th file opened.
> 
> Any additional suggestions?
> 
> On 4/27/05, Bakken, Luke <[EMAIL PROTECTED]> wrote:
> > > 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.
> >
> > If you move the 'my $oBook' inside the for loop it the object should be
> > destroyed on each iteration:
> >
> > for my $hashEntry ( @LOGS )
> > {
> >
> >          my ( $localfile)        = $hashEntry->{name};
> >          my ( $err_msg )         = "";           # error message
> > variable
> >
> >          my $cmd                 = "";
> >
> >          #
> >          # Get row count of each file, to generate results file
> >          #
> >          my $oBook = new
> > Spreadsheet::ParseExcel::Workbook->Parse($localfile);
> >          my ($iR, $iC, $oWkC);
> >          my $oWkS = ${$oBook->{Worksheet}}[0];
> >
> >          print "------ SHEET: ".$oWkS->{Name}. "\n";
> >          print "Row: ".$oWkS->{MinRow}." v ".$oWkS->{MaxRow}."\n";
> >
> >         $resultMessage.=basename($localfile).",".$oWkS->{MaxRow}."\n";
> > }
> >
> > --
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > <http://learn.perl.org/> <http://learn.perl.org/first-response>
> >
> >
> 


-- 
Primer:
   Shane Carruth: It's about some engineers that are trying to build a
device that "degrades" gravity. They find out it has unexplainable
properties. Hilarity ensues.

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to