end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

perl 5.12.3でSpreadsheet::WriteExcelによるcgi出力で失敗

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が、例外を投げないので、ややハマりました。