end0tknr's kipple - 新web写経開発

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

CGI.pmで cgiのquery paramをparse

CGI->new() のように引数なしでnewするケースが殆どだと思いますが、CGI->new( "query param 形式な文字列" ) で利用すると、cgiの引数(query param)を簡単にパースできます。
※しかもurl decode付き
apacheaccess_logをparseする際にも使えそう

#!/usr/local/bin/perl
use strict;
use CGI;
use Data::Dumper;

#http://hot.exist.example.jp/test.pl のquery param
my $text = join('&',
                'url=http%3a%2f%2fwww%2egoogle%2eco%2ejp%2f',
		'checked=tanaka',
		'checked=suzuki');

my $cgi = CGI->new($text);
print Dumper($cgi);

実行結果

$ ./foo.pl 
$VAR1 = bless( {
                 '.parameters' => [
                                    'url',
                                    'checked'
                                  ],
                 'use_tempfile' => 1,
                 '.charset' => 'ISO-8859-1',
                 '.fieldnames' => {},
                 'param' => {
                              'checked' => [
                                             'tanaka',
                                             'suzuki'
                                           ],
                              'url' => [
                                         'http://www.google.co.jp/'
                                       ]
                            },
                 'escape' => 1
               }, 'CGI' );