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();