in reply to A different kind of Spreadsheet::ParseExcel memory problem.

Expanding on philcrow's last paragraph I just encapsulated your code in routines:

#!/usr/bin/perl -w use strict; use Win32::OLE; #or ParseExcel or whatever my $DEBUG = 1; # # Subroutines # sub get_cell_val() { my ($src_sheet, $src_row, $src_col) = @_; if (defined $src_sheet->{Cells}[$src_row][$src_col]) { $_ = $src_sheet->{Cells}[$src_row][$src_col]->Value; } else { $_ = ''; } } # # Main Program # sub ret_files { my ($path)=@_; chdir($path) or die "Cannot change path: $!"; return(glob('*.xls')); } sub main { #... the rest of your code }# end of main 1;

Got your files into a list:

C:\Temp>perl -e "require ''; print map{qq|$_\n|} ret_files('.') +;" > do.dat
Ran your script for each file independently:
perl -ne "BEGIN{require ''}; main($_)" do.dat

If you really want to make things simple you can copy the above command line instructions into a batch file (.bat) and re-run it whenever you want. Update: Oh yeah, you will want to flush your output so that you can see those debug statements early on if you are going to use this for hundreds of files.

Celebrate Intellectual Diversity