in reply to
Spreadsheet::WriteExcel accepts a valid filehandle as an argument to new() as of version 0.31. The best way to achieve what you want is via a tied scalar and the IO::Scalar module which is part of the IO::Stringy distribution. For example:
# Write an Excel file to a string via IO::Scalar.
# Refer to the IO::Scalar documentation for further details.
tie *XLS, 'IO::Scalar', \$a;
# Create a spreadsheet and write something to it.
my $workbook = Spreadsheet::WriteExcel->new(\*XLS);
my $worksheet = $workbook->addworksheet();
$worksheet->write(0, 0, "Hi Excel!");
$workbook->close(); # This is required
# The Excel file is now in $a. As a demonstration, print it to a f
open TMP, "> test.xls";
print TMP $a;
There are further examples of using filehandles with Spreadsheet::WriteExcel in the filehandle.pl program that is in the examples
directory of the distribution.