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;