Amon2 により CSV を PSGI/Plack で出力する方法
Amon2::Plugin::Web::Streaming と Text::CSV_XS の組み合わせにより、ストリーミング出力が可能です。 (Streaming 出力をサポートしたサーバーをつかって実装する必要があります)
use strict;
use warnings;
use utf8;
use Amon2::Lite;
use Text::CSV_XS;
sub load_config { +{ } }
get '/csv' => sub {
my $c = shift;
$c->streaming(sub {
my $respond = shift;
my $csv = Text::CSV_XS->new({binary => 1});
my $writer = $respond->([200, ['Content-Type' => 'text/csv']]);
$csv->combine(1,2,3);
$writer->write($csv->string . "\n");
$csv->combine(4,5,6);
$writer->write($csv->string . "\n");
$writer->close();
});
};
__PACKAGE__->load_plugin('Web::Streaming');
__PACKAGE__->to_app(handle_static => 1);
より実用的な例でいいますと、DB からの出力は以下のように実装できます。
while (my @row = $sth->fetchrow_array()) {
$csv->combine(@row);
$writer->write($csv->string . "\n");
}
$writer->close();
Published: 2013-04-06(Sat) 08:39