• ベストアンサー

perlの初心者本買ってきたものの・・・

つい最近perlに手を付けて、非常に手こずっています。何に手こずっているかも申しますと、ほんの通りにプログラムを書いてもうまく動作しないことです。本は「Perl/CGI超入門」(藤森○絵)筆です。入力フォームのボタンをクリックしてもWEBページ(localhost)が「開くことができません」とでます。HTML、○.plどちらも指定したフォルダに入っています。HTMLのページは入力フォームですがちゃんとWEBに出ます。でも、フォームの中の文字列を取得してCGIのページになると表示されません。perlはCygwin,Activperlとも試してみました。CGIのページに跳んだときのURLは本に書いているURLと同じくでます。 著者へ質問できるようなアドレスも無く、技術評論者に質問できるようなページもないので、なすすべ無しといったところです。私のPCの設定に問題があるのかもと思い、インターネットセキュリティーソフトをおアンインストールしてみましたが同じでした。内心、これを超初心者として出版しているのであれば、本当に初心者のものは皆頭にきてしょうがないだろうなというのが本音です。perl自体の言語で引っかかっているのではなく、サンプルプログラムが動作しない(コピペで)。どなたか同じ本を買った方で、原因が分かるか方おりませんでしょうか。

  • Perl
  • 回答数7
  • ありがとう数6

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.7

> そのときの、URLを見てみると、​> http://localhost/httpd/cgi-bin/64.pl?name=&zipcode=&addr=&a...​のように表示がでます。 > localhostとhttpdが入っていますが、これを​http://localhost/cgi-bin/64.pl​ と書き直してやるとwebが表示されました。 えーと、 /httdp/cgi-bin というディレクトリ構成になっていると思いますが、CGIスクリプトから 見る場合、/httpd という部分は指定しないようになっていませんか? 色々設定できるので断言できませんけど、 http://localhost/ としたときの基準位置が c:/httpd/ かなにかで、スクリプトには そこは書かずに localhost/sample.html と書けば c:/httpd/sample.html を参照するように anttpd がよろしくやってくれたはずです。 同様に、 http://localhost/cgi-bin/cgi-sample.pl と書けば、 c:/httpd/cgi-bin/cgi-sample.pl を見に行くので、逆に http://localhost/httpd/cgi-bin/cgi-sample.pl という参照をしてしまうと、期待したファイルは見えないはずです。 任意のHTMLファイルから 64.pl を呼び出すときの href= ... の 部分はどうなっていますか?

ityounomi
質問者

お礼

ありがとうございます。localhost/httpdと出るのが原因であることが分かっていたのですが、ボタンをクリックするとそうなってしまってこまっておりました。一度全部ファイルを削除して、もう一度ファイルの中を整理しましたら、きちんと動作しました。原因はいまだに分かりませんが、今は言うことを聞いて動作してくれていますので、ようやく投げ出したくなった気持ちも落ち着きました。言語自体は簡単みたいなので、どうにかなりそうかなと少しやる気も出てきました。皆さんには本当に助けていただいて感謝しております。ありがとうございました。

その他の回答 (6)

  • necomimi
  • ベストアンサー率41% (633/1540)
回答No.6

インフォシークの場所を使って実行しましたが ちゃんと動きますね(^w^ perlの位置(インフォシークにあわせて)を変えたのとcgi-lib.plをDLしただけ。

ityounomi
質問者

お礼

ありがとうございます。なにやら少し原因が分かってきました。 HTMLのページからボタンをクリックします。クリックによってcgi-bin/64.plに飛びます。すると「webを表示できない」となります。そのときの、URLを見てみると、http://localhost/httpd/cgi-bin/64.pl?name=&zipcode=&addr=&pay=%8C%BB%8B%E0のように表示がでます。localhostとhttpdが入っていますが、これをhttp://localhost/cgi-bin/64.plと書き直してやるとwebが表示されました。htmlファイルはhttpd/64.html、CGIファイルはhttpd/cgi-bin/64.pl、ライブラリーはhttpd/cgi-bin/cgi-libです。ためしにhtmlファイルをcgi-binの中に入れてみてもだめでした。なぜ、URLが正しく表記されてこないのはなぞです。

  • fire--
  • ベストアンサー率49% (146/293)
回答No.5

#1です。 AnHTTPDは自分も使っています。最初のサンプルが動いているのなら、 AnHTTPDとperlとのつながりもOKのようですね。 自分のローカルで試そうとしたが、最近はperlを使っていないので レンタルサーバにhtmlとplを上げてみました。レンタルサーバには perlがあるのは確かなのですが、cgi-libの場所は不明なので、 require "cgi-lib.pl"; &ReadParse(); の2行はコメントにして、実行したところ動きました。 という事は、ityounomiさんが自分で言っていたように、cgi-libの 問題の可能性大ですね。 一度、わたしの試したと同じことをして動作確認してはどうでしょう。 それで動くようだったら、確実にcgi-libに問題を絞り込めます。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

#3の補足にあるスクリプトは一本のものですか? であればこれでは動きませんよ。 まず#!の行がファイルの先頭にあり、最初に出力するのは ヘッダー情報でなければなりません。 が、補足にあるものでは真ん中あたりですよね。 あと、ヒアドキュメントのターミネータの消し残しらしきごみが あるので、これでエラーになっているかもしれません。 もう一度どのように本に載っているのか確かめてはどうですか。

ityounomi
質問者

お礼

ありがとうございます。ファイルはHTMLファイルとCGIファイルの2つに分かれています。もちろん、スクリプトは別になっています。 ゴミの部分もサンプルプログラム自体が動かないので・・・。なんとなく自分的にはライブラリーの問題のような気がしています。ライブラリーにつながっていないスクリプトは動きます。ライブラリーもCGIファイルと同じフォルダに入れておりますが。

  • g_p_
  • ベストアンサー率53% (28/52)
回答No.3

こんにちは、皆さんと同じく本は持っていません。 (localhost) という事は、お使いのパソコン一台でやっているのですよね? 1.WEBサーバーは何を使っているのですか? 2.ブラウザの URL に http://localhost/ と入力して実行キーを押したら、何が表示されますか? #1氏も聞かれていますが、まずそこからでしょうね。 これは、 >perl自体の言語で引っかかっているのではなく、サンプルプログラムが動作しない(コピペで)。 以前の問題ですので、まずこれを補足してもらわなければ、皆さん回答のしようがないです。

ityounomi
質問者

お礼

助け舟ありがとうございます。webサーバーは中田昭雄さんが作成したAN HTTPDというフリーソフトです。その本はそれを使用してのサンプルプログラムです。PCを立ち上げてHTTPDのアイコンをクリックして、下のタスクに小さく表示された後、htttp://localhostとURLに入れて、ENTERすると「WEBサイトによってこの表示を拒否されました」とでます。下のサンプルプログラムでは普通に表示されます。URLもhttp://localhost/cgi-bin/61.plのように表示されています。 サンプルプログラムでの実行なので、変なところに全角とかも入っていないと思いますし、もう・・・・!!! #!/cygwin/bin/perl $fierst_name = "吉田"; $family_name = "藤森"; $FIEST_NAME ="yosida"; $FAMILY_NAME = "fuzimori"; print <<HTML_DOCUMENT; content-type: text/html <html> <body> 私の名前は$family_nameです。<br> 皆さん、私のことは「$fierst_name」と呼んでください。<br><br> My name is $FIERST_NAME $FAMILY_NAME.<br> My family name is $FAMILY_NAME.<br> Please call me $FIRST_NAME.<br> </body> </html> HTML_DOCUMENT EOF

ityounomi
質問者

補足

<html> <head> <title>申込み画面</title> </head> <body> <h1>申込み画面</h1> <form action=cgi-bin/64.pl method="get" > <p>名前:<input type="text" name="name" size="24"></p> <p>郵便番号:<input type="text" name="zipcode" size=8> 住所:<input type="text" name="addr" size=80></p> <p>支払方法: <select name="pay"> <option value="現金" selected>現金 <option value="クレジットカード">クレジットカード </select> </p> <input type="submit" value="申込み"> </form> </body> </html> EOL #!/cygwin/bin/perl require "cgi-lib.pl"; &ReadParse(); print <<HTML_DOCUMENT; content-type: text/html <html> <head> <title>受付画面</title> </head> <body> <h1>受付確認画面</h1> <table border="1"> <tr> <td>お名前</td> <td>$in{'name'} 様</td> </tr> <tr> <td>商品のお送り先</td> <td>$in{'zipcode'} $in{'addr'} </td> </tr> <tr> <td>ご請求方法</td> <td>$in{'pay'}</td> </tr> </table> <br> <p>以上の内容で商品を受け付けました。<br> ありがとうございました。</p> </body> </html> HTML_DOCUMENT EOL これがうまくいかないのです!!!! cgi-libはこのcgiと同じフォルダに入っています。

  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.2

こんにちは。#1の方と同じく本は持っていませんが、適当にperlで掲示板を作成したことがあります。その時は、ネットで勉強しました。私はとほほさんのページがかなり参考になりました。よろしければご参考にされて下さい。

参考URL:
http://www.tohoho-web.com/wwwcgi6.htm
  • fire--
  • ベストアンサー率49% (146/293)
回答No.1

外してるかもしれませんが、 その本は持ってないですが、なんだかwebサーバが動いてないようにみえますが、どうでしょう。 「入力フォームですがちゃんとWEBに出ます」という事ですが、入力フォームのhtmlをブラウザにドラッグして開いているとかいう事ないですか。そうだとすると、urlのエリアがhttp:でなくfile::で始まってます。 あるいは、webサーバのドキュメントルート下にcgiプログラムを置いてないとか。

ityounomi
質問者

お礼

ありがとうございます。ご指摘の点どちらもクリーしているんですが、だめなんです。 cgi-lib.plもcgiのフォルダの中に入っています。 どうも、 reqire "cgi-lib.pl"; &ReadParse(); あたりが問題のような気がしています。 バージョンが合わないとか、何かありそうな気がしています。

関連するQ&A

  • CGI/Perlでメールフォームを作るには。

    CGI/Perlでメールフォームを作るにはHPのトップページ(ソースコード)にCGI/Perlのプログラムを入力すればメールフォームは使用できるようになるのでしょうか? よろしくお願いします。

    • 締切済み
    • CGI
  • Perlにこのようなことはできるのでしょうか

    質問させていただきます 最近ちょっとcgiに触れているのですが、perlには次のようなことは可能なのでしょうか 可能ならばもう少し勉強して実際にそういった動きをするcgiを作ってみたく思っています 1.テキストボックスにUrlを入力してもらう 2.送信ボタンが押されたらUrlを参照して対象のページの内容を見にゆき、 3.その中を文字列検索して欲しい情報を持ってきて、表示する cgiに「できること」は様々なページに載っていたのですが、「できないこと」はさすがに載っておらず 2.の部分ができるのかできないのかがよくわかっておりません cgiで可能なのかどうか、もし不可能ならばそういった動作を行うのによいのはどんな言語なのか というのをご返答いただければと思います。

  • Perl(cgi)でこれはできますか?

    今まで、デスクトップ上にあるJAVAのプログラムで、 http://***.ne.jp を解析して、その中から、ある値を含む条件のURLのみを抜き出してHTMLリンク集を作っていました。 この作業を、ウェブベース(sakura.ne.jpのライトプランで利用予定。使用可能言語は多分perlのcgiのみ)で行うことはできないものかと思っております。 具体的には、 インプットボックスに、解析したいURLを入れて、検索ボタンを押すと、そのURLの文章の中から必要な文章のみを抜き出してそれと、HTMLリンク集にして返すというプログラムです。 また、perlやcgiは今まで殆ど触ったことが無い言語なので、どんなことでも、参考になりそうなことがありましたら是非是非、ご紹介ください。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • perl初心者 「カウンタ」

    勉強のためにperlでカウンタを作りました。 しかし、このカウンタは単独で動作するだけでHTMLと連動しないようなものです。 配布されているようなカウンタでは、HTMLに<img src="http://~~/count.cgi?id=index">と記述することでcgiを呼び出して、HTMLと連動しているということは分かるのですが、どういった仕組みなのか分かりません。 どなたかご教授お願いします。

    • ベストアンサー
    • Perl
  • Perlを勉強したいのですが…

    タイトルの通りPerlを勉強したいと思っています。 その為に本を購入しようと思っているのですが、いろいろあってどれがいいのか判りません。 勉強したい理由は ●商用のホームページを作るのに注文フォームを作りたい。 ●後々は掲示板も作成したい。 ですが、プログラムについてはまったくの初心者です。(HTML、スタイルシートはなんとか理解しています。) プログラム初心者でも解かりやすいお勧めの本があったら教えてください。よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perlが動作しない?

    色んな所でお世話になってます。 皆様にはいつも親切にお答え下さって、本当に感謝しています。 今回、CGIを使ってやりたいことがあり、翔泳社から出版されている 『10日でおぼえるPERL/CGI 第2版』 という本を買ってきました。 が、インストール場所、apacheの設定、入力など、何も間違っていないのに、動作してくれません。 状況として、WEBページで開くと、txt(もちろん拡張子はcgiに変更してあります)の内容がそのまま出力されます。 本来ならばprintのダブルコーテーション内だけが出力されなければいけない筈(本の写真にはそう写ってる)なんですが、WEBページ(127.0.0.1)を開いても #! c:/perl/bin/perl print "Content-type: text/plain\n\n"; print "Hello Perl !"; と表示されるだけなんです。 apacheにはうまく接続できているので、問題はPERL.EXEの方だと思うのですが… 再インストールしてもムダな努力でした。 本の支持通りやってるつもりなので原因が思いつきません。 どこに原因があるのでしょうか? 可能性はたくさんあるんだと思いますが、可能な限り全て試してみますので、よろしくお願いします。

    • 締切済み
    • CGI
  • CGIのためのperlを勉強したい。

    CGIのためのperlを勉強したいのですが本屋さんなんかでいい本はみつけたのですが今金欠で、本がかえません。そこでCGIのための初心者向けのperlを開設しているわかりやすいいいページを紹介してほしいとおもいます。よろしくお願いします。

    • ベストアンサー
    • CGI
  • ページを更新できないようにするには

     Rubyで掲示板システムを作成しています。  CGIでフォームで書き込みをした後に表示されたページで,ページの再読込をすると,再び書き込まれた風になってしまいます。CGIの処理の方法は, Web上:  掲示板のフォーム内のhiddenフォームでCGIのcase文で書き込みを行うプログラムへ移行するように値を設定してある。送信ボタンを押すと,CGIを呼び出し,   ↓ CGI上:  hiddenの値から,書き込みのプログラムであるとcase文で分岐させ,受け取ったフォームの値を書き込む。書き込んだ後,そのプログラムから掲示板を表示するプログラムを呼び出し,printでHTMLソースを渡す。   ↓ Web上:  掲示板が表示される。 (CGIのプログラムは書き込みも表示も同じファイルで行い,その動作はhiddenフォーム内のmodeの値で分岐してある) のような流れになっています。printで表示されているので,ブラウザのurlに,書き込みの動作を行うhiddenフォームの値その他の入力されたデータが残っているからだと思います。  そこで,ブラウザの方から更新(できれば戻る,進むも)を使えないようにできないでしょうか。  ご教授お願いいたします。 (ちなみにCGIのプログラムの方で再読込をしても書き込まれないようにできるのでしょうか)

  • Perl/CGIを学んでいるのですが

    Perl/CGIを独学で学んでいます。 掲示板やチャットが作成できる程度です。 私はPerl=CGIと考えていたのですが(HTMLがサイト作成に使うことのように専用の言語とでもいいましょうか)、ぜんぜん違うようです。 PerlはCGI以外に Perlではどのようなことができるのでしょうか? 大まかな認識だと ビィジュアルを持たない、(VBでいうフォームパーツですかね)バッチファイルなど? で、コマンドプロンプトで動作するようなイメージがありますが(.batを起動するとメモ帳みたいなアプリではなく、特定の処理して終了みたいな) 無知な私にPerlで出来ることをお教えください。 せっかくPerl/CGIが少しは理解できているのでPerlをもっと勉強しようかとあぐねいているとこらです。 混乱しているため変な質問でしたらすいません

  • PHPの本につていです

    PHPの本で、システムのプログラムが載っており、逐一(1文ずつ)訳されている本もしくはサイトはありますでしょうか。 パールでしたら CGI/Perl作り方入門 KENT著 技術評論社 に相当するものが欲しいです。 ありましたら教えてください。

    • ベストアンサー
    • PHP

専門家に質問してみよう