Perl で、アップロードしたファイルを処理する

Perl の場合は、CGI として動作させる場合は、必ず


print qq|Content-type: text/html\n\n|;

という行が必要な以外は、PHP とほとんど同じである。 アップロードには、いつも使っているおなじみの CGI モジュールを使う。


use CGI;

そうすると、以下のようにアクセスできる。


our $CGI = new CGI;
...
my $xml = $CGI->param('file');

$xml はファイルポインタが入っている。通常は open(IN, "..."); などするときの IN にあたるものである。以下は、コード。アップロードする側の HTML ファイルは PHP でアップロードファイルを処理するで紹介したのと同じ。

#!/usr/bin/perl use strict; use CGI; our $CGI = new CGI; print qq|Content-type: text/html\n\n|; init(); sub init() {
# XMLパーサー作成 ('UTF-8')
my $xml_parser = new XML::Parser(    ProtocolEncoding => 'UTF-8',
                                    Handlers=>{    Start=>\&startElement,
                                                End  =>\&endElement,
                                                Char =>\&dataHandler    });
# ファイルのオープンはいらない。input タグで指定した name 属性がそのままファイルハンドルになる
my $xml = $CGI->param('file');

# XMLパース処理
$xml_parser->parse($xml) or    die "XML error: $xml_parser";

# ファイルクローズ
close($xml);
} 1;