I've used Spreadsheet::ParseExcel::Stream instead of Spreadsheet::ParseExcel and it uses 1.0GB memory after parsing an xls-file with a single worksheet and 64772 rows and 120 columns. This is before I go through the parsed worksheets and rows.
Opening this in Excel (2007) seems to use only 230MB.
So even with this module, reading a somewhat large Excel file uses excessively large amounts of memory.
Edit: The xls-file is 122MB.

(For those not familiar with *nix, when a machine runs out of memory, the kernel starts killing processes to free some. Usually, the first process to go is the one that claimed the most, like in this case my testprogram that tries to parse the xls-file).
From dmesg:

... it uses 1.0GB memory after parsing an xls-file with a single worksheet and 64772 rows and 120 columns.

Yes, the claim of "no memory overhead" is a bit of a mistake/exaggeration. But you would get the same result using just Spreadsheet::ParseExcel with the CellHandler and NotSetCell options (which S::PE correctly says "reduces" memory overhead, not has "no" memory overhead). Spreadsheet::ParseExcel parses and saves a bunch of stuff before it even gets to the cell data. So the S::PE with the CellHandler/NotSetCells options and/or S::PE::Stream only save you from storing the cell data in memory. I don't know if it would be possible to tell S::PE to not save the metadata before the cell data (or possible to modify it to implement such a thing). Only jmcnamara would know for sure..

When putting a smiley right before a closing parenthesis, do you:

Use two parentheses: (Like this: :) )
Use one parenthesis: (Like this: :)
Reverse direction of the smiley: (Like this: (: )
Use angle/square brackets instead of parentheses
Use C-style commenting to set the smiley off from the closing parenthesis
Make the smiley a dunce: (:>
I disapprove of emoticons
Other