cgiについて

perlぜんぜん知らないのでメモ

#!/usr/local/bin/perl

# 1.REQUEST_METHODをチェックしてリクエストプロトコル(GET or POST)を判断する

if( $ENV{'REQUEST_METHOD'} eq "GET" ) {
# 2.GETであれば、QUERY_STRINGからクエリを読み込む

    $buffer = $ENV{'QUERY_STRING'};
} else {
# 3.POSTであれば、CONTENT_LENGTHを使用してリクエストのサイズを調べ、
# 標準入力からクエリを読み込む

    read( STDIN, $buffer, $ENV{'CONTENT_LENGTH'} );
}

print "Content-Type: text/html", "\n\n";

print "<b>Data</b> ", $buffer, "<br>\n";
print "<b>Split Data</b><br> ", "\n";

# 4.クエリをアンパサンド( & )で分割

my @pairs = split(/&/,$buffer);
foreach $pair (@pairs){
# 5.イコール( = )で連結されたキーと値を分割(kye=value)
    my($name, $value) = split(/=/, $pair);
# 6.プラス( + )をスペース( )に変換
    $value =~ tr/+/ /;
# 7.16進数にエンコードされた文字列をデコード
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    print "$name : $value<br>";
}