- ベストアンサー
PerlをCGIに変換する方法について教えてください
- 地域とサイズに応じて小包の料金を計算するPerlプログラムをCGIに変換したいです
- 地域名とサイズを入力し、料金を計算して表示するプログラムです
- Perlのコードを一部修正してCGIとして動作させる方法を教えてください
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
URLでパラメータ指定すると漢字があることからエンコードしなければいけなくなるため、その手間を惜しむならフォームが必要になります。 まずフォームはGETメソッドで **************************************************************************************************** <html> <head> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>TEST</title> </head> <body> <form method="GET" action="./hoge.cgi"> <p>送り先:愛知から<select size="1" name="TO"> <option value="愛知">愛知</option> <option value="関東">関東</option> <option value="信越">信越</option> <option value="近畿">近畿</option> <option value="東海">東海</option> <option value="北陸">北陸</option> <option value="東北">東北</option> <option value="中国">中国</option> <option value="四国">四国</option> <option value="九州">九州</option> <option value="北海">北海</option> <option value="沖縄">沖縄</option> </select></p> <p>荷物のサイズ<select size="1" name="SZ"> <option value="60">60</option> <option value="80">80</option> <option value="100">100</option> <option value="120">120</option> <option value="140">140</option> <option value="160">160</option> <option value="170">170</option> </select></p> <p><input type="submit" value="送信" name="B1"><input type="reset" value="リセット" name="B2"></p> </form> </body> </html> **************************************************************************************************** こんな感じでファイル名は「hoge.html」とします 一回で入らないのでつぎへ
その他の回答 (1)
- ralf124c
- ベストアンサー率52% (232/446)
続き CGIはファイル名を「hoge.cgi」として ---------------------------------------------------------------------------------------------ここから #!/usr/bin/perl my %IN; my @tmpPrmt = split(/&/,$ENV{'QUERY_STRING'}); foreach(@tmpPrmt){ my ($p1,$v1) = split(/=/,$_); $v1 =~ tr/+/ /; $v1 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; if(exists($IN{$p1})){ $IN{$p1} .= "\t".$v1; }else{ $IN{$p1}=$v1; } } my(%area) = ( "愛知" => 0, #県内は仮に第0地帯とする "関東" => 1, #第1地帯 "信越" => 1, "近畿" => 1, "東海" => 1, "北陸" => 1, "東北" => 2, #第2地帯 "中国" => 2, "四国" => 2, "九州" => 3, #第3地帯 "北海道" => 5, #第5地帯 "沖縄" => 6, ); #地帯番号から、サイズ・料金対応表への変換 my(%postage) = ( 0 => { 60=> 600, 80=> 800, 100=>1000, 120=>1200, 140=>1400, 160=>1600, 170=>1700 }, 1 => { 60=> 700, 80=> 900, 100=>1100, 120=>1300, 140=>1500, 160=>1700, 170=>1900 }, 2 => { 60=> 800, 80=>1000, 100=>1200, 120=>1400, 140=>1600, 160=>1800, 170=>2000 }, 3 => { 60=> 900, 80=>1100, 100=>1300, 120=>1500, 140=>1700, 160=>1900, 170=>2100 }, 5 => { 60=>1100, 80=>1300, 100=>1500, 120=>1700, 140=>1900, 160=>2100, 170=>2300 }, 6 => { 60=>1200, 80=>1400, 100=>1600, 120=>1800, 140=>2000, 160=>2200, 170=>2400 }, ); $areaname = $IN{TO}; my $areano = $area{$areaname}; $size = $IN{SZ}; my $price = $postage{$areano}->{$size}; $price =~ s/(\d)(\d{3})$/$1,$2/; print "Content-type: text/plain\n\n"; print "$areaname 地方は第 $areano 地帯です。\n$size サイズは $price 円になります\n";