Text::CSV_XSで、CSVを出力。

CSVでダウンロードする機能を作ることがたまにあるけど、毎回調べるのが無駄なのでメモ。
Text::CSV_XS使うと、CSVファイルを読み込んでparseみたいな事を簡単にできるんですが、DBとかに入ってるデータをCSVで出力したいだけなので、割愛。

use Text::CSV_XS;

my @data = ('あ','い','う');
my $tc = Text::CSV_XS->new({binary=>1}); # binary=>1は日本語使うなら入れとく
$tc->combine(@data);

my $csv = $tc->string();

print "Content-type: application/octet-stream\n";
print 'Content-Disposition: attachment; filename="data.csv"' . "\n\n";
print $csv;

実際は1行じゃないから、ループしますけど。
あとContent-typeは正解が不明。。

Content-type: application/octet-stream
Content-type: application/x-csv
Content-type: text/csv

↑辺りで動くらしい・・。