facebook twitter hatena line email

Perl/php風データ取得スクリプト

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
#!/usr/bin/perl


# php風データ取得スクリプト
# require './indata.cgi';

print "content-type: text/html\n\n";

require './jcode.pl';

&jcode'convert( *value, 'sjis' );
# POST用
if ($ENV{'REQUEST_METHOD'} eq "POST") {
  my $_POST_STR;
  read( STDIN, $_POST_STR, $ENV{'CONTENT_LENGTH'} );
  $_POST_STR =~ tr/+/ /;
  $_POST_STR =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;
  %_POST = &param_to_hash($_POST_STR);
}
# GET用
if ($ENV{'QUERY_STRING'}) {
  my $_GET_STR = $ENV{'QUERY_STRING'};
  $_GET_STR =~ tr/+/ /;
  $_GET_STR =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;
  %_GET = &param_to_hash($_GET_STR);
}
# REQUEST用
%_REQUEST = %_GET;
foreach (keys %_POST) {
  $_REQUEST{$_} = $_POST{$_};
}

# パラメータ文字列からハッシュへ
sub param_to_hash {
  my ($str) = @_;
  my %hash;
  my (@arr) = split(/&/, $str);
  foreach (@arr) {
    my ($key, @value) = split(/=/, $_);
    if ($#value >= 1) {
      $hash{$key} = join("=", @value);
    } else {
      $hash{$key} = $value[0];
    }
  }
  return %hash;
}


1;