end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

「HTTP::Body - HTTP Body Parser」 はHTML::Parserより気軽に使えるかも

http://search.cpan.org/perldoc?HTTP::Body
HTMLのパーサは HTML::Parser ( http://search.cpan.org/perldoc?HTML::Parser )しか知りませんでしたが、HTTP::Body は気楽?に解析できてよいかも。

use HTTP::Body;

sub handler : method {
    my ( $class, $r ) = @_;

    my $content_type   = $r->headers_in->get('Content-Type');
    my $content_length = $r->headers_in->get('Content-Length');
    
    my $body   = HTTP::Body->new( $content_type, $content_length );
    my $length = $content_length;

    while ( $length ) {

        $r->read( my $buffer, ( $length < 8192 ) ? $length : 8192 );

        $length -= length($buffer);
        
        $body->add($buffer);
    }
    
    my $uploads     = $body->upload;     # hashref
    my $params      = $body->param;      # hashref
    my $param_order = $body->param_order # arrayref
    my $body        = $body->body;       # IO::Handle
}