CGIモジュールは非常に巨大なため、引数を受け取るときには軽量・コンパクトなプログラムを書きたい場合がある。
サンプル
#--------------------------------------------------# # クエリーをデコードし取得 # #--------------------------------------------------# util::getQuery(\%form); package util; #-------------------------------------------------# #■クエリーを取得する # 内容:GET/POST判定をしクエリーを取得する。 # URLデコード後、指定のハッシュへ格納する。 # # 引数:(1)格納先ハッシュ:リファレンス # 戻り値:なし #-------------------------------------------------# sub getQuery{ my $form = shift; #クエリーをセットするハッシュ(リファレンス) my $buff; my @pairs; my $pair; #-- クエリー文字列取得 --# if ($ENV{'REQUEST_METHOD'} eq "POST"){ read(STDIN, $buff, $ENV{'CONTENT_LENGTH'}); } else{ $buff = $ENV{'QUERY_STRING'}; } #-- name=valueの組み合わせに分ける --# @pairs = split(/&/, $buff); # $buffは # name1=value1&name2=value2& ... &nameN=valueN # となっているハズ #-- デコードしつつハッシュにセット --# foreach $pair ( @pairs ){ my( $name, $value ) = split(/=/, $pair); #$pairは name=value となっているハズ #-- URLデコード --# $value =~ tr/+/ /; #“+”を空白に $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # %XX を本来の文字コードに #-- ハッシュにセットする --# if( exists( $form->{$name} ) ) { $form->{$name} .= "," . $value; #同名の場合は','で連結する } else{ $form->{$name} = $value; } } }