• ベストアンサー

'cgi-lib.pl'などのファイルの位置は?

Perlの基本的な質問ですが、cgi-lib.plやjcode.plは どのディレクトリに入れれば自然でしょうか? 私はLinuxとWindowsの両方にPerl5.6を入れておりまして、今までは相対パスによって、スクリプトの近くに置いていましたが、ディレクトリ(フォルダ)が変わるごとに設定しなおしで面倒になってきました。 WEBでもレンタルサーバーなど利用したことは無いんですが、このような基本ライブラリは、require 'cgi-lib.pl';で呼び出して?いると思いますが、 しかるべき位置にこのファイルが無いとだめだと思います。ご教授ください。

  • Perl
  • 回答数4
  • ありがとう数0

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

  • ベストアンサー
  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.2

Perlは、探索パスを保持している「@INC」という特殊配列変数からモジュールを検索します。 パスの一番最後には「.」がありますので、最後にはcgiが実行されるカレントにある モジュールが見つかります。 # perl -e 'print @INC' /usr/local/lib/perl/5.6.1 /usr/local/share/perl/5.6.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.6.1 /usr/share/perl/5.6.1 /usr/local/lib/site_perl . @INCに 以下の様に明示的に、自分専用の探索パスをセットする方法もあります。 use /my_home/cgi-bin/mylib require cgi-lib.pl

その他の回答 (3)

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.4

kounesi さん、失礼しました。 #3の回答とおり「lib」を書き忘れていました。 「use /my_home/cgi-bin/mylib」 は書き間違いです。

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.3

> use /my_home/cgi-bin/mylib これは誤った使い方です。 通常はlibモジュールで@INCに追加します。 use lib '/my_home/cgi-bin/mylib'; なお、どこから呼び出す場合も require 'cgi-lib.pl'; でかつ libでの追加が面倒な場合は、 @INCでデフォルトで探し出す一覧に入っているディレクトリ、つまり /usr/local/lib/site_perl などに(いずれかひとつのディレクトリ) cgi-lib.pl を入れておけばOKです。

  • namiri_e
  • ベストアンサー率37% (37/98)
回答No.1

普通、スクリプトと一緒のディレクトリにおいていますよね。 私の場合、同様のプログラムごと(掲示板なら掲示板ごと)にディレクトリを作っていますので、 その中に一つずつ、相対パスで大体「../****.pl」となる位置においています。

関連するQ&A

  • cgi-lib.plのReadParse関数

    あるパールからcgi-libを呼び出して、ReadParse関数を使おうとするとInternal Server Errorがでてしまいます。 パールの中身は #!/usr/local/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse(*in); です。 そこで3行目と5行目の行頭に#をつけて飛ばすとパールは正常に動きます。 これってcgi-lib.plのReadParse関数がいけないんでしょうか? ダウンロードしたまま何も変更していないのに..... ちなみにサーバーのパールのバージョンは5.004のようです。

    • ベストアンサー
    • CGI
  • cgiがうまく動作しません。

    はじめまして。 現在独学でlinuxの勉強をしている者です。検索をしたり本を読んだりして対策を試みたのですがどうしても解決できないため、質問させていただきます。 環境は redhatlinux9 Apache2.0.40 です。 cgiを置いたディレクトリにブラウザでアクセスすると、 Internal Server Error と出てしまいます。 ログを見ると、 [error] 6099: ModPerl::Registry: Can't locate ./jcode .pl in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/li b/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/pe rl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i3 86-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_per l /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 .) at /var/w ww/cgi-bin/bbs/wforum.cgi line 11.! と表示されています。試しにwforum.cgiの11行目以下の require './jcode.pl'; require './fold.pl'; require './wf_init.cgi'; を require 'jcode.pl'; require 'fold.pl'; require 'wf_init.cgi'; と変更してみたところ、今度は (略)Can't locate fold.pl(略) at /var/www/cgi-bin/bbs/wforum.cgi line 12.! というエラーログが表示されました。 perlプログラムの文法、パーミッション、改行コード、FTP転送の際の転送モードは確認済みのため、問題ないと思われます。また、ここの過去ログを参考にして作成した #!/usr/bin/perl print<<EOF Content-type: text/html <HTML><BODY>CGI works Good.</BODY></HTML> EOF というtest.cgiは動作可能でした。 こういった場合、どのような原因が考えられるでしょうか。どうかご教授ください。よろしくお願いします。

  • cgi-lib.plの&ReadParse();の()の中

    cgi-lib.plのReadParseを使う時、  require 'cgi-lib.pl';  &ReadParse(*---); こんな風に書きますよね? ()の中はどういう意味なんでしょうか? 何でもいいんですか?

    • ベストアンサー
    • Perl
  • jcode.pl と &ReadParse()

    CGIファイルの先頭は #!/usr/local/bin/perl require './cgi-lib.pl'; require './jcode.pl'; &ReadParse(); という感じになっています。 ここでのの require は、日本語を使うためのもの だと思っています。合っていますか? &ReadParse() というのは何ですか? require と関係があるみたいです。 require を書かずに &ReadParse() を書くとCGIエラーになります。

    • ベストアンサー
    • CGI
  • cgi-lib.plのShort read~というエラーについて

    perlで画像掲示板の作っています。今まで特に問題なかったのですが、突然投稿する際に、「Short Read:1370,got 0」というエラーが表示されるようになってしまいました。 cgi-lib.plをrequireしているので、その部分を読んではみたのですが、どういったエラーなのかがわかりません。 cgi-lib.plの解説ページなどもみたのですが、cgi-lib.plがどういったものかということを説明するものばかりでエラーについては探しても見つからなかったのでこちらに投稿しました。 このエラーがどういったもので、どのように対処すればよいかご存知の方がいらっしゃいましたら、ご回答をよろしくお願いします。

    • ベストアンサー
    • CGI
  • CGIでjcode.plを読み込めなくなりました

    さんざん検索をかけて色々試したのですが、どうしても解決できず どなたかご存知のかた、教えてください。よろしくお願い致します。 つい昨日までちゃんと動いていたCGIが突然 「jcode.plがありません」 と訴えてきました。 4月にサーバーを乗換え丸2ヶ月、問題なく動いていたのに 突然です。何がなんだか分かりません。 もちろん、このCGIに関わるファイルは一切いじっておりません。 自分なりに検討した結果 引っかかっているのは以下のコード # 漢字コード変換ライブラリを読み込む if (-f "jcode.pl") { require "jcode.pl"; } else { &errexit("jcode.plがありません。\n"); } -略- &jcode'convert(*tmp, $kcode_cgi); このふたつです。jcode.plを読み込めない為にもれなく後出の呪文が効かないんだろうなという事は推測しているのですが。 このためフルパスでも試しましたが変化なし。 この読み込みをしなければ、CGIは取りあえず表示します。 なので、日本語変換プログラム以外は正常に動作しているようです。 どなたか同じような経験の有る方いらっしゃいませんか? アドバイスよろしくお願い致します。

    • ベストアンサー
    • CGI
  • Can't locate jcode.pl in @INC...

    perlスクリプトをcrontabで、   0 * * * * /フルパス と起動したところ、 上記のエラーがでます。 エラー部分は、   require './jcode.pl'; です。 requireにフルパスを打ったら、直ったんですが、なぜでしょう。 Perlの設定が悪いのでしょうか?

    • ベストアンサー
    • Perl
  • 非常に見にくいです.....

    このジャンルであっているかどうか微妙ですが質問させていただきます。 よくフリーのCGIやPHPなどのテキストファイルをダウンロードしたとき、アップロード時に転送モードが悪かったのかどうか知りませんが、よく #!/usr/bin/perl↑↑require './jcode.pl';↑require './cgi-lib.pl';↑↑..................... のように改行部がすべて↑になってますよねぇ? もし「戻りページ」など設定しなければならない部分があったりする時は非常に見にくくやりづらいのです。 そこでこの上の例を自動で #!/usr/bin/perl require './jcode.pl'; require './cgi-lib.pl'; に書き換えてくれるようなソフトがあったら教えて下さい!!

    • ベストアンサー
    • CGI
  • CGIデータのアップロードについて

    CGI&perlの掲示板をカスタマイズして、 既に開設しているHPで使うために、 アップロードしようと試みるのですが、 受け付けてくれません。 初心者で、何が悪いのか良く解りません。 ちなみにHPは、infoseekです。 cgi-binのディレクトリへアップロードするのですが、 igo-bbs.cgi bbs.dat を受け付けてくれません。 cgi-lib.pl jcode.plはアップロード出来ます。 ほとほと、困っております。 よろしくご指導のほど、お願い申し上げます。

  • POSTで受けたデータを jcode.pl するには

    あまりに初歩的で書き込むのが恥ずかしいです。 今、フォームからアンケートを自分宛にE-Mailで もらえる CGI を書いています。 日本語処理以外の部分はほとんど全部動きました。 しかし、日本語のテキストは、メーラ(NC4.7付属) で受信すると、「%ほにゃらら」みたいな表現に なっていて、そのままでは読めません。 jcode.pl の使い方が間違っているらしいことは 簡単に推測できますが、ではどうまちがっている のか見当がつきません。 内容: アンケートのフォームで使用しているフィールド名 は、value01~value66です。 そこで、Actionで指定している cgi で、以下のように 記述してみました。 #!/usr/local/bin/perl require './cgi-lib.pl'; require './jcode.pl'; #日本語コード変換処理 &jcode'convert(*value,'jis'); #連想配列に読み込み &ReadParse (*value); $to = 'nydela@imasy.or.jp'; $ipaddr = $ENV{'REMOTE_HOST'}; この後、メール・ファイルを開いてSendMail してやると、66個のフィールドが全部届き ますが、日本語は読めません。jcode.pl と cgi-bin.pl は、この cgi と同じディレクトリに あります。 日本語が入力される可能性のあるフィールド 番号は分かっているので、&ReadParse の後で 個別に convert したらいいのかと思ったのですが、 今度は連想配列の要素を jcode'convertに どうやって渡したらいいのかわからなくなりました。 アドバイスお願いします。 あと、どういうわけか、 $ipaddr = $ENV{'REMOTE_HOST'}; も、ブランクしか帰しません。ちなみに$ENVを たとえば PATH に変更しますと、きちんとその 値を返します。これもアドバイスお願いします。

    • ベストアンサー
    • Perl