何が違うのかサッパリ

このQ&Aのポイント
  • スクリプトのソースで上手くいかなかったため、なぜ違うのか聞いたが理解できなかった。
  • 条件分岐の記述方法について理解できない。キーワード検索しても解決しない。
  • Perlの基礎を勉強しており、関数やデータの扱い方は理解している。
回答を見る
  • ベストアンサー

何が違うのかサッパリ

このまえ、スクリプトのソースで上手くいかなかったので 聞いたのですが違うようです。 何が違うのか全然わかりません。 #!/usr/local/bin/perl print "Content-Type: text/html\n\n"; print <<WC; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body bgcolor=#ffffff> <select name=\"menu\"> <option value=\"1\">こんにちは</option> <option value=\"2\">●●ですか?</option> <option value=\"3\">ゲーム好きですか?</option> </select> <input type=\"submit\"> WC if (わかりません){ print "こんにちは\n"; } elsif(わかりません){ print "いいえ違います。\n"; } elsif(わかりません){ print "いいえキライです。\n"; } else { print "質問してね。\n"; } print <<WC; </body></html> WC exit(0); 条件分岐にどう記述すればいいかわかりません。( ちゃんと調べました。どんなキーワドにしてもでません。 (もしこの質問がわかるような解説サイトがあれば教えてください) データや関数など扱えます。Perlの基礎は勉強しています。 何が“どう”違うのかやどう記述すればよいのか教えてください。

  • wc13
  • お礼率67% (74/110)
  • Perl
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#62235
noname#62235
回答No.2

まず、2箇所でヒアドキュメントを使ってますよね? それぞれ、識別子(WCとなっているもの)が同じですが、2箇所でヒアドキュメントを使う場合それぞれ異なる識別しにしないとダメですよ(WC_1とWC_2のように)。 次にプログラムの構造ですが、引数がない場合はフォームを表示、そうでない場合はフォームの入力値に対する出力をさせたいようですが、まずPerlでフォームデータを扱うにはcgi-lib.plを使うのが一般的です(使わなくても自力で解析は可能ですが面倒です)。 HTTPの引数はURLエンコーディングされていますから、これをデコードする必要がありますし、またGETメソッドとPOSTメソッドの場合でデータを取り出す方法が異なります。この辺のことをすべて予期に計らってくれるので、cgi-lib.plはとても便利です(これを使用していないPerl製のCGIを見つけることは難しいほどです)。 http://www.futomi.com/lecture/form/cgilib.html フォームからのデータ取得の基本がわかっておられないようですので、上記ページをよく読んで理解してください。 基本的な流れは ・cgi-lib.plライブラリを読み込む ・ReadParse()関数を実行 ・連想配列%in{}にフォームのデータが読み込まれるので、それにしたがって処理。 (たとえばフォーム"namae"に対する値は$in{"namae"}を見ればわかる) ・&ReadParse()の結果、引数がない場合はフォームを表示する とりあえず今のプログラムは「わかりません」の部分だけを変更すればどうにかなるという状態ですらありません。

wc13
質問者

お礼

詳しく有り難うございます。 たいへんたすかります。

その他の回答 (1)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

このスクリプトを見た感じでは、なんとなく無茶な事をやろうとしているので、 Perlの基礎をおさえているなら、次は、 HTTP通信やCGIの基礎を勉強してみてください。 http://www.rfs.jp/sb/perl/03/01.html とか。

wc13
質問者

お礼

有り難うございました。

関連するQ&A

  • なんで?

    プルタウンメニューに書いてある内容を選び実行したら 文字がでるというプログラムを前に質問したときのソースコードを参考に作りましたがその文字が表示されません。 記述エラーなしでちゃんと動作します。 でも文字が表示されません。 ソースコードはこれです。 #!/usr/local/bin/perl print "Content-Type: text/html\n\n"; print <<WC; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body bgcolor=#ffffff> <select name=\"menu\"> <option value=\"1\">こんにちは</option> <option value=\"2\">●●ですか?</option> <option value=\"3\">ゲーム好きですか?</option> </select> <input type=\"submit\"> </body> </html> WC if ($FORM{'1'}){ print "こんにちは\n"; } elsif($FORM{'2'}){ print "いいえ違います。\n"; } elsif($FORM{'3'}){ print "いいえキライです。\n"; } exit(0); 何が間違っているのでしょうか?

  • HTML文のOptionボタン値の抽出

    出力イメージ通りに出力したいのですが、Perl の print 構文が正しくない ようで思った通りに出力してくれません。 どなたか教えて頂けないでしょうか? ■ [検索]ボタンをクリックした後の出力イメージ ■ Hello 平成18年 bye ■ メニューのHTML文 ■ <HTML> <HEAD></HEAD> <BODY> <FORM action="select.pl" NETHOD="POST"> <SELECT name="combo1"> <OPTION value="8">平成17年</OPTION> <OPTION value="9" selected>平成18年</OPTION> </SELECT> <INPUT type="SUBMIT" name="SUBMIT" value="検索"> </FORM> </BODY> </HTML> ■ select.pl ■ #!C:/Perl/bin/perl use CGI; print "Content-type: text/html\n\n"; print "<html><body>\n"; print "Hello<BR>\n"; print $form->param('combo1') . "<BR>\n"; ← ここの構文が不明 print "bye<BR>\n"; print "</body></html>\n";

  • セレクトボタンで、サブルーチンを呼び出したいのですが

    宜しくお願いします セレクトボタンで項目を選択して其々別々のサブルーチンを呼び出したいのですが うまく機能しませんどうか宜しく御教授ください。 以下スクリプトです #!/usr/local/bin/perl &header; print qq|<h3>管理モード</h3>\n|; print qq|<li>新規データ追加 データ更新 データ削除 いづれかの処理項目を選んでください</li>\n|; print qq|<form action=\"$myself\" method=\"POST\">\n|; print qq|処理:<select name=action>\n|; print qq|<option value=\"edit\" value=$s>追加\n|; print qq|<option value=\"update\ value=$s">更新\n|; print qq|<option value=\"del\" value=$s>削除</select>\n|; print qq|<input type=submit value='送信する'>\n|; print qq|<P><table border=1 cellspacing=0><tr>\n|; print qq|</body></html>\n|; if ($s eq "edit"){ &edit; } elsif ($s eq "update"){ &update;} elsif ($s eq "del"){ &del;} sub edit { } sub update {; } sub del {; } #--------------# # HTML記述  # #--------------# sub header { print qq|Content-type: text/html\n\n|; print qq|<html>\n<head>\n|; print qq|<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=Shift_JIS\">\n|; print qq|<LINK rel=\"stylesheet\" type=\"text/css\" href=\"./style.css\">\n|; print qq|<title></title></head>\n|; print qq|<body>\n|; }

  • Perl CGI -入力フォーム-

    Perlを始めたばかりの初心者です。 Perlの中にフォームを入れたいのですが、エラーが出てしまいます。 現在は、ローカルで作動させています。 #! c:/perl/bin/perl print "Content-type: text/html\n\n"; print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; print "<p><input type="text" name="name"></p>\n"; print "</body>\n"; print "</html>"; 【print "<p><input type="text" name="name"></p>\n";】この記述がエラーの対象行となっています。 inputを使用する場合は他にも記述が必要なのでしょうか? 宜しくお願いします。

  • コーディングについて

    http://www.aimix.jp/cgi/accformkioku.html 上のサイトを参考にログイン画面を作っていまして、 この例の場合のようにセレクトする値が3つ、4つならこの書き方でもよいと思うのですが、 セレクトする値が10個、15個…となればソースが長くなり、とても見づらいものとなってしまいます。もうちょっとスマートな 書き方はあるのでしょうか?(一部略してあります) print "Content-type: text/html\n\n"; print "<html>\n"; print "<head>\n"; print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n"; print "<title></title>\n"; print "</head>\n"; print "<body>\n"; &analysis; &auth; sub analysis{ 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; $value =~ s/\r//g; $FORM{$name} = $value; } $pass1 = $FORM{'user_name'}; return; sub login{ if($pass1 eq '1'){ $check1 ="selected"; } elsif($pass1 eq '2'){ $check2 ="selected"; } else{ $check3 ="selected"; } print <<HEADER; <center> <caption><h1>ログイン</h1></cption> <table border="5" bgcolor="cfcfcf" width="300" height="150"> <tr> <td align="center" valign="center"> <form name="form" method="post" action="./xxx.cgi"> ユーザー名: <select name="user_name"> <option value="1" $check1>A</option> <option value="2" $check2>B</option> <option value="3" $check3>C</option> </select> <br><br> パスワード: <input type="password" name="password"> <br> <center> <input type="submit" name="submit" value="ログイン"> </center> </form> </td> </tr> </table> </center> HEADER } print "</body>"; print "</html>"; 1;

    • ベストアンサー
    • Perl
  • perlがうごきません

    <html> <head> <title>form3</title> </head> <body> <form action="form3.cgi" method="post" name="form3"> <input type="text"name="form3"> <input type="submit"value="送信"> </form> </body> </html> ::::::::::::::::::::::::::::::: #! /usr/bin/perl if($ENV{"REQUEST_METHOD"} eq "GET"){ $str=$ENV{QUERY_STRING"}; }else{ read(STDIN, $str, $ENV{"CONTENT_LENGTH"}); } $str=~ tr/+/ /; $str=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/eg; foreach(split(/&/, $str)){ my ($key, $value)=split(/=/, $_); $data{$key}=$value; } print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head><title>form3</title></head>\n"; print "<body>$data{'form3'}</body>\n"; print "</html>\n"; exit; :::::::::::::::::::::::::::::::: どうしてもうごきません。 どこかスクリプトがまちがっているのでしょうか。 パールのパスはあっています。

    • ベストアンサー
    • Perl
  • html →perlへフォームを渡そうとしてますが

    独学でmacでパールを勉強しています。 始めてからまだ1週間すこしくらい。 教科書読みながら、 CGIへフォームを渡す所の段階まで進んできました。 現段階で、htmlからperlへフォームを渡そうとしているのですが、 上手く行きません。 状況としては、htmlのフォームを入力して、登録を押す。 成功であれば→実行結果が表示されるはずなのですが、 現段階ではFinderがその実行htmlの場所を開くだけという形になっています。 下記は実験用に使っているソースです。 ーーーーーーーーーーー htmlは <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <title>test</title> <style type="text/css"> </style> </head> <body> <h1>メンバーズリスト</h1> <form method="post" action="form.cgi"> <p> 名前:<br/> <input type="text" name="name"/> </p> <p> 性別: <input type="radio" name="sex" value="male" checked>男 <input type="radio" name="sex" value="female">女 </p> <input type="checkbox" name="megane">メガネを付けてる </p> <p> <select name="kankei"> <option value="yuujin">友人 <option value="kaisya">会社関係 <option value="sonota">その他 </select> </p> <p> 住所: <textarea name="jyusyo" rows="5" cols="40" ></textarea> </p> <p> <input type="submit" value="登録"/><input type="reset" value="クリア"/> </p> </form> </body> </html> ーーーーーーーーーーーーーーーーー perlは #!/usr/bin/perl require 'cgi-lib.pl'; &ReadParse(*form); $name = $form{'name'}; $sex = $form{'sex'}; $megane = $form{'megane'}; $kankei= $form{'kankei'}; $jyusyo = $form{'jyusyo'}; print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>情報受け取り</TITLE></HEAD>\n"; print " <BODY>\n"; print "<H1>情報受け取り</H1><HR>\n"; print "名前:${name}<BR>\n"; print "性別:${sex}<BR>\n"; print "めがね:${megane}<BR>\n"; print "関係:${kankei}<BR>\n"; print "住所${jyusyo}<BR>\n"; print "</BODY>\n"; print "</HTML>\n"; __END__ です。 ちなみに localhost上で同一ファイルに入れて、 動かしてます。 ご確認の上、ご助言ください、 perlの教科書に書いてあった構文は、 htmlの学習をするために使ってきたものと全く違ったため、 要点だけ残す形で、再度書いたものです。 htmlの文章がおかしいのか、perlがおかしいのか、 頭が変になりそうです。お助けください。

    • ベストアンサー
    • Perl
  • perlがうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n"; print "まずい$in{'form2'}\n"; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。 perlの場所も正確です。

    • ベストアンサー
    • Perl
  • 入力フォームを変数に格納

    Perlを始めたばかりの初心者です。 inputで入力した情報を変数として取得する方法は可能でしょうか? #! c:/perl/bin/perl print "Content-type: text/html\n\n"; print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; print "<p><input type=\"text\" name=\"name\"></p>\n"; print "</body>\n"; print "</html>"; 上記の入力フォームで、777と入力した場合、サーバーを経由しないで、777を変数に格納したいのですが、可能でしょうか? 宜しくお願いします。

    • ベストアンサー
    • Perl
  • Perlがサーバー上でうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n; print "まずい$in{'form2'}\n; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。

    • ベストアンサー
    • Perl

専門家に質問してみよう