#!/usr/local/bin/perl # cgi2args # Convert cgi's POST contents to arguments for some process. # (c ) 1995-1997 by HIROSE Yuuji [yuuji@ae.keio.ac.jp] # Last modified Tue Sep 2 18:34:42 1997 on crx # $Id: cgi2args,v 1.2 1997/02/21 08:01:36 yuuji Exp yuuji $ # # How to use this package: # This script converts cgi variables to option vs. contents pairs. # You must specify cgi variable `execcmd' set to command to execute. # And the contents of cgi variable `args' is passed to the command # Ex.)
# # この入力フォームで現れる3つの入力窓に対し、x, y, z と答えた場合、 # ./foo -year "x" -month "y" "z" # と起動されます。execcmd で呼び出されるコマンドは、から始まるhtml # テキストを吐き出すものにします。 # # require "jcode.pl"; # して、 # # print "HTTP-unchara"; # # の前に # # foreach (@opts){ # &jcode::convert(*_,'euc'); # } # # をいれると漢字のアーギュメントもちゃんと処理してくれます。 require "./jcode.pl" if (-f "./jcode.pl"); package cgi2args; $log = 1; # 出力logを取る行数 local($stream, $var, $val); if ($ENV{"REQUEST_METHOD"} =~ /POST/i) { sysread(STDIN, $stream, $ENV{"CONTENT_LENGTH"}); } else { $stream=$ENV{"QUERY_STRING"}; } foreach (split('&', $stream)) { ($var, $val) = split('=', $_, 2); $val =~ s/\+/ /g; $val =~ s/%(..)/pack("c", hex($1))/ge; # $val =~ s,\`,\',g; # disable backquoting if ($var eq "execcmd") { $execcmd = "$val"; next; } elsif ($var eq "args") { push(@args, "\"$val\""); next; } # eval "\$$var=$val"; # Set variable directly @opts = (@opts, "-$var ", "\"$val\"") if ("$val"); } if (-f "./jcode.pl") { foreach (@opts){ &jcode'convert(*_,'euc'); #' } } # print "HTTP/1.0 200\n"; #外しとこう… print "Content-type: text/html\n\n" ;# unless ($0 =~ /nph-/); #print "Pragma: no-cache\n\n"; # print "Call `$execcmd @opts @args'