Perl モジュール CGI.pm のメモ書きです。
HTML のフォームより送信された GET, POST データを、PHP でいうところの $data = $_POST みたいに一気に取得する方法です。
例えば、以下のようなフォームがあるとします。
<form action="dump.pl" method="post"> <input type="text" name="data1" value="aaaaa" /> <input type="text" name="data2" value="bbbbb" /> <input type="text" name="data3" value="ccccc" /> <input type="text" name="array[]" value="11111" /> <input type="text" name="array[]" value="22222" /> <input type="text" name="array[]" value="33333" /> <input type="submit" value="POST"/> </form>
これを一気に連想配列にぶち込みたい。
そこで、こんな感じにしてみました。
#!/usr/bin/perl use strict; use warnings; use CGI; use Data::Dumper; my $q = CGI->new; my $key = ''; my $value = ''; my $hash = {}; if ($q->param()) { foreach my $key ($q->param) { foreach my $value ($q->param($key)){ if ($value) { if ($key =~ /^array\[\]$/) { push(@{$hash->{array}}, $value); } else { $hash->{$key} = $value; } } } } } else { $hash->{msg} = 'param is empty'; } &send_data($q, $hash); sub send_data { my ($q, $hash) = @_; print $q->header(-expires=>'now', -charset=>'utf-8'); print $q->start_html(-title=>'dump',-lang=>'ja-JP'); print "<h1>dump</h1>\n"; print "<pre>\n"; print Dumper($hash); print "</pre>\n"; print $q->end_html; return; } exit;
こんな感じに取れます。
dump $VAR1 = { 'data1' => 'aaaaa', 'data2' => 'bbbbb', 'data3' => 'ccccc', 'array' => [ '11111', '22222', '33333' ] };
データにはこんな感じにアクセスできます。
print "$hash->{data1}\n"; foreach ( @{$hash->{array}} ) { print "$_\n"; }
こういう処理についてはやっぱり PHP の方が便利だな。
use CGI;
my $q = CGI->new;
$params = $q->Vars;
あるいは
use CGI ‘:cgi-lib’;
$params = Vars;