Keystroke has asked for the wisdom of the Perl Monks concerning the following question:
I'm using a module that is very memory intensive.
I'm also calling one of it's functions many times which construct a large amount of data. I would like to free the memory between each call so that my program can run with out running out of memory. I wrote the subroutine below but it doesn't completely free all of the memory. The program still runs out of memory. Can anyone see what else I need to do? The module I'm using is Spreadsheet::ParseExcel incase your wondering.
Thanks.
Thanks.
sub deleteref { my $ref = shift; foreach my $k (keys %$ref) { if (ref($ref->{$k}) eq 'SCALAR') { delete($ref->{$k}); } elsif (ref($ref->{$k}) eq 'HASH') { deleteref($ref->{$k}); } elsif (ref($ref->{$k}) eq 'ARRAY') { undef(@{$ref->{$k}}); } elsif (ref($ref->{$k}) eq 'CODE') { delete($ref->{$k}); } elsif (ref($ref->{$k}) eq 'REF') { deleteref($ref->{$k}); } elsif (ref($ref->{$k}) eq 'LVALUE') { delete($ref->{$k}); #} elsif (ref($ref->{$k}) eq '') { } else { delete($ref->{$k}); } } undef(%$ref); }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: recursive reference delete subroutine
by Zed_Lopez (Chaplain) on Dec 15, 2004 at 18:08 UTC | |
by chromatic (Archbishop) on Dec 16, 2004 at 02:43 UTC | |
by Zed_Lopez (Chaplain) on Dec 16, 2004 at 05:30 UTC |
Back to
Seekers of Perl Wisdom