I would concur with both of the above two opinions. Certainly, in my humble, the overwhelming “10,000 pound elephant” here in this closet, is the fact that this Excel file is anywhere close to 1 gigabyte in size. This spreadsheet is trying to be “a database” when what it ought to be doing is to reference an external data-source, i.e. a database. The present state-of-things has “seriously outgrown its breeches,” as such things so often do, such that Perl is an innocent bystander.
Then, in any case, I think that it should be pushing the responsibility over to “Excel, itself,” by means of OLE.
Very soon now, though, this problem is going to need to be dealt with at its true source: a single spreadsheet file was never truly intended (IMHO ...) to single-handedly deal with that much data. Excel does have excellent facilities for handling external data sources, and SQLite (which contains everything in a single external file and does not require a separate server) ... or even MS-Access (ditto)... are among those available sources. This company has IMHO waited much too long to deal with this issue already. It will be very pleased with the results when it has “crossed that line” ... as in, “what took us so long?”
Perl, truly, is not to blame here. Go and solve this problem properly, strictly in Excel terms, and it will be gone for good. Don’t waste time trying to monkey with Perl in this case...