colinux環境を壊したことをきっかけに、perl 5.10.?->perl 5.12.3へ移行しましたが、どうやらperl 5.12.3では Spreadsheet::WriteExcelによるcgi出力で失敗するケースがあるようです。
※以前、記載している次のエントリも合わせてご覧下さい。
http://d.hatena.ne.jp/end0tknr/20090112/1231755461
my $workbook = Spreadsheet::WriteExcel->new('-');
Spreadsheet::WriteExcel は↑このように「-」でnew()すると、標準出力へ出力できますが、perl5.12.3へ移行後、「開こうとしているファイル'〜.xls'の形式は、ファイル拡張子が示す形式と異なります。...」というエラーが出力されるようになりました。
どうやら、出力されるxlsファイルが空(0byte)となっていることが原因のようですが、仕方がないので、次のようにbinmode()へ変更したところ、解消しました。
binmode(STDOUT); my $workbook = Spreadsheet::WriteExcel->new(\*STDOUT);
0byte生成時にSpreadsheet::WriteExcelが、例外を投げないので、ややハマりました。