sub decode {
  binmode(STDIN);
  if($ENV{'REQUEST_METHOD'} eq "POST"){
    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  }else{
    $buffer = $ENV{'QUERY_STRING'};
  }

  @pairs = split(/&/, $buffer);
  foreach $pair (@pairs) {
    ($name,$value) = split(/=/,$pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

    $in{$name} = $value;
  }
}
スクリプト書くたびにコレを書いてる
マルチプル、マルチパートなんて使わないのでこれで十分事足りてる