# Don't do this! my @defeat_stream; my $xls = Spreadsheet::ParseExcel::Stream->new($xls_file, \%options); while ( my $sheet = $xls->sheet() ) { while ( my $row = $sheet->row ) { # current row now in memory. my @data = @$row; # after this, current row will *disappear*, unless... # you keep the data. push @defeat_stream, $row; } } # Now you either have the entire spreadsheet in memory (defeating the purpose # of the module), or have run out of memory.