パスがうまく通らない

このQ&Aのポイント
  • CGIプログラムの中で、モジュールのパスが正しく設定されていないため、エラーが発生しています。
  • use文で指定されているモジュールのパスが@INCに含まれていないため、モジュールが見つからないエラーが発生しています。
  • パスの記述方法や大文字小文字の区別など、モジュールのパス指定を確認してください。
回答を見る
  • ベストアンサー

パスがうまく通らない

Check.pmが  o:\public_html/post_pervice/cgi/lib にあります。 このモジュールを利用するために以下のようなプログラムを書きました。   #! /usr/bin/perl -w   use CGI::Carp qw(fatalsToBrowser);   unshift @INC, "o:/public_html/post_service/cgi/lib";   print join "\n",@INC;   use Check; この中の  use Check; をコメントで伏せて動かすと、   o:/public_html/post_service/cgi/lib   O:/usr/site/lib   O:/usr/lib のような表示がなされるので、  unshift @INC, "o:/public_html/post_service/cgi/lib"; はちゃんと機能しているようです。 しかし  use Check; のコメントを外して動かすと、   Can't locate Check.pm in @INC (@INC contains: O:/usr/site/lib O:/usr/lib .) at O:\public_html\post_service\cgi\showINC.pl line 8.   BEGIN failed--compilation aborted at O:\public_html\post_service\cgi\showINC.pl line 8. のようなエラーが出てしまいます。 何がいけないのでしょう。

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

エラーメッセージを見れば分かりますが, use Check; の時点では @INC が変更されていません. なぜかというと, use はコンパイル時に処理されるのに対し unshift は実行時に処理されるからです. つまり, 今の場合「字面としては unshift が前にある」が実行の順序としては「use Check; が先」なのでうまくいきません. use lib 'o:/public_html/post_service/cgi/lib'; とするか, BEGIN ブロックに入れればよかったような気がします.

makoji
質問者

お礼

何で  use Check; が外されている状況では@INCに加えれられているパスがが、この一行を加えると外れてしまうのか不思議でしたが、そういう理由があったのですね。  use lib "~~~"; でパスが追加されました。 ありがとうございます。

関連するQ&A

  • コマンドラインで通っているパスがブラウザからだと通っていない

    以下のようなcgiを組みました。  #! /usr/bin/perl -w    use Calendar::Simple;  use CGI::Carp qw(fatalsToBrowser);  use Data::Dumper;  use lib "/home/makoji/makoji00001/myperl/lib";    my @curr=calendar;  print Dumper(@curr); レンタルサーバー上のこのCGIをSSHで  perl calendar.cgi とやるときちんと作動します。 しかしながらブラウザから作動すると500 Internal Sever Errorが出ます。 エラーログを見ると、以下のようになっています。 [Fri Jun 12 23:53:51 2009] [error] [client 114.162.47.49] Can't locate Calendar/Simple.pm in @INC (@INC contains: /usr/lib/perl5/5.8.8/i686-linux /usr/lib/perl5/5.8.8 /usr/lib/perl5/site_perl/5.8.8/i686-linux /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl .) at /home/makoji/makoji00001/www/calendar.cgi line 3. [Fri Jun 12 23:53:51 2009] [error] [client 114.162.47.49] BEGIN failed--compilation aborted at /home/makoji/makoji00001/www/calendar.cgi line 3. [Fri Jun 12 23:53:51 2009] [error] [client 114.162.47.49] Premature end of script headers: calendar.cgi Calendar/Simple.pmが@INCの中に無いとエラーが出ています。3行目でコンパイルに失敗したのもやはりCalendar/Simple.pmです。 @INCにCalendar/Simple.pmのパスを通すためにcgi頭で  use lib "/home/makoji/makoji00001/myperl/lib"; を宣言しているわけです。 で、SSHを用いてコマンドラインから実行すると作動します。 なのに、何でブラウザからだと500 Internal Server Errorが出るのでしょう。 そもそも  use CGI::Carp qw(fatalsToBrowser); と宣言しているのに500 Internal Server Errorが出るというのも可笑しな話です。 何に問題があるのでしょうか。 ちなみに.bashrcは以下のようになっています。  # .bashrc    # Source global definitions  if [ -f /etc/bashrc ]; then   . /etc/bashrc  fi    # User specific aliases and functions  export MANPATH=/home/makoji/makoji00001/myperl/man  export PERL5LIB=/home/makoji/makoji00001/myperl/lib お手数をお掛けします。

  • 文法はあってるのにサーバーエラーが出る

    perlで構文チェックをしたところ、OKが出たので、 アパッチにて実行したところサーバエラーがでました。 調べたところ、以下のようなエラーが出ましたが、これは、サブルーチンや、ライブラリが呼出されていないのでしょうか?どのように対処すればいいか教えてください。 Premature end of script headers: c:/www/public_html/subsub.cgi Undefined subroutine &jcode::convent called at c:\WWW\PUBLIC~1\SUBSUB.CGI line 8. Premature end of script headers: c:/www/public_html/okikae.cgi Can't locate cgi-bin.pl in @INC (@INC contains: C:/usr/local/lib C:/usr/local/site/lib .) at c:\WWW\PUBLIC~1\OKIKAE.CGI line 3.

    • 締切済み
    • CGI
  • Jcode.pmについて

    ネット上からダウンロードしてきたCGIプログラム内で、Jcode.pmを使用しているようなのですが、サーバ にUpしたところ、以下の様なエラーが表示されました。 ※1 Can't locate Jcode.pm in @INC (@INC contains: /usr/lib/perl5/5.6.1/i386-linux /usr/lib/perl5/5.6.1 /usr/lib/perl5/site_perl/5.6.1/i386-linux /usr/lib/perl5/site_perl/5.6.1 /usr/lib/perl5/site_perl .) at access/accview.cgi line 68. ※2 BEGIN failed--compilation aborted at access/accview.cgi line 68. ちなみに、accview.cgi line 68には use Jcode; と書かれていました。 エラーの原因として、何がありますか? また、その解決法を教えていただきたいです。

    • ベストアンサー
    • Perl
  • Can't locate R.pm in @INC

    perl初心者でまた質問させていただきます。 CGIを作っているのですが、R.PMが使えなくて困っています。 USE R; とすると、以下のようなエラーが出てしまいます。 Can't locate R.pm in @INC (@INC contains: /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/5.10.0 /usr/lib/perl5/site_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.10.0 /usr/lib/perl5/vendor_perl .) at /srv/www/htdocs/cgi/ringo.cgi line 5. BEGIN failed--compilation aborted at /srv/www/htdocs/cgi/ringo.cgi line 5. Premature end of script headers: ringo.cgi そこで、 locate R.pm で、場所を探しました。 /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/R.pm ということで、 use R '/usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/'; このように変えてみたものの、同じエラーです。ちなみに、CGIではなく、PERLのプログラムからだと、use R;で動作することは確認しました。 よろしくお願いします。

    • 締切済み
    • CGI
  • perl niftyについて。use CGI;

    画像アップロードのスクリプトを作ろうと思っているのですが、 use CGI; という記述をすると、ここでエラーに引っかかります。 下はperl checkerでのエラー表示です Can't locate CGI.pm in @INC (@INC contains: /usr/local/lib/perl5/5.00503/sun4-solaris /usr/local/lib/perl5/5.00503 /usr/local/lib/perl5/site_perl/5.005/sun4-solaris /usr/local/lib/perl5/site_perl/5.005 .) at a.cgi line 10. BEGIN failed--compilation aborted at a.cgi line 10. 参考URLはここ http://www.topstudio.co.jp/~kmuto/html/node38.html niftyでは使えないようになってしまっているのでしょうか? また、CGI.pmを使わないファイルアップロードの仕組みを解説しているサイトを知っている方がいたら、教えてくださいませ。

    • ベストアンサー
    • CGI
  • フォームの送信ボタンを押すと

    どなたか、お助けいただければ幸いです。 メールフォームを設置し、いざ送信テストをしようと 思ったのですが、送信をする際に下記のようなエラーがでます。 対処方法を教えてください(@´_`@)フエーン □エラーメッセージ□ Software error: Can't locate Jcode.pm in @INC (@INC contains: /usr/lib/perl5/5.6.1/i386-linux /usr/lib/perl5/5.6.1 /usr/lib/perl5/site_perl/5.6.1/i386-linux /usr/lib/perl5/site_perl/5.6.1 /usr/lib/perl5/site_perl/5.6.0/i386-linux /usr/lib/perl5/site_perl/5.6.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.6.1/i386-linux /usr/lib/perl5/vendor_perl/5.6.1 /usr/lib/perl5/vendor_perl .) at mailform.cgi line 8. BEGIN failed--compilation aborted at mailform.cgi line 8. というような、エラーです。このエラーは当方は初めて見るエラーでして、どのように対処すればわかりません。。。 □8行目記載内容□ use Jcode; のみです。 □フォーム設置ツリー□ ../inquiry/index.html ../cgi/toiawase/mailform.cgi ../cgi/jcode.pl   ↓ここから下は同ディレクトリーです。 ../cgi/cgi-lib.pl という中身で設定しております。 □環境□ IBM Xserver(Xeon 2.4GHz) Redhat Linux DirectAdmin Apache1.3.29 もし、この件でこの内容がなければ対処ができないとのことであれば、 何なりとおっしゃってください。 よろしくお願いします。。。

    • ベストアンサー
    • CGI
  • utf-8コードの指定

    以下のURLにて同じ質問をしました。 http://soudan1.biglobe.ne.jp/qa4938782.html その時は解決したと思ったのですが、私の勘違いでした。 Undefined subroutine &main::Jcode called at listpage.pl line 220, line 855. というエラーからして、 $value = Jcode($value)->utf8; という記述そのものの問題ではなく、jcode.pmが認識されていないということなのでしょう。 でもプログラムの最初には use Jcode; としてあるし、パスが通っていないことも考えて#!(何と呼ぶんだったっけ?)も #!/usr/bin/perl -I /usr/lib としました。perl.exeをd:\usr\bin/に置いて /usr/bin/perl で良いなら、jcode.pmはd:\usr/libにあるからパスはこれで良いですよね!? ちなみにこのディレクトリにはcgi.pmも置いていますが、cgi.pmは普通に動いてます。 何が問題だと考えられますか? お手数をお掛けします。

  • cgi-libを使って変数値渡しをしたいのですが

    cgi間の変数渡しの質問をしたのですが、うまくいかなかったので、調べてみると、 cgi-lib.pl'を使うことで簡単に値を渡せるということが分かりました。 ですが、 use lib '/home/www'; require 'cgi-lib.pl';# cgi-lib.plを呼び出す $test=1000; # 変数値渡し? form_input_post.cgi?name=$test; &ReadParse(*in); として、$testの値をform_input_post.cgiに渡そうとしたのですが。 コンパイルエラーが出てしまいました。 Can't modify constant item in scalar assignment at form_input_post.cgi line 49, near "$test;" syntax error at form_input_post.cgi line 49, near "$test;" form_input_post.cgi had compilation errors. というエラーです。 初歩的なミスな気がしますが原因がわからないので教えて頂きたいです。 よろしくお願いします。

    • 締切済み
    • CGI
  • @INCにrequireされたファイルが無い

    自作のCGIを実行したところ Can't locate BASE64 in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at g etHTTP line 71. のようなエラーが出ます。 BASE64がインストールされているかどうか確認するために、次のサイトのcheck.cgiを実行してみました。 http://perl.shtml.jp/check/check.html インストールされているということなので、検索を掛けてBase64.pmのパスを調べました。 C:\Perl\lib\MIME そこで以下のコードを追加して実行しなおしました。 unshift @INC, "C:/Perl/lib/MIME"; 残念ながらうまく動きませんでした。 Can't locate BASE64 in @INC (@INC contains: C:/Perl/lib/MIME C:/Perl/site/lib C: /Perl/lib .) at getHTTP line 71. どうすれば良いでしょう。 お手数をお掛けします。

    • ベストアンサー
    • Perl
  • エラーログについてお尋ねしたいことがあるのですが。

    エラーログについてお尋ねしたいことがあるのですが。 CGIがうまく接続されずサーバー上で500エラーになるためサーバー管理者に尋ねたところエラーログに以下のようにKihon.pmが見つからない模様です。という返事が返ってきましたがCGIは詳しくないため、この内容が理解できずに困っています。 また、このような場合の回避策などがあればご指導願いたいと思っています。 Can't locate Kihon.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at kanri.cgi line 16. BEGIN failed--compilation aborted at kanri.cgi line 16.

    • ベストアンサー
    • CGI

専門家に質問してみよう