@INCにrequireされたファイルが無い

このQ&Aのポイント
  • 質問中のエラーメッセージを解決するために、BASE64がインストールされているかどうか確認し、check.cgiを実行してパスを調べました。
  • しかし、追加したコードでもエラーが解決せず、BASE64が見つからないというエラーメッセージが表示されます。
  • 解決策の提案やサポートを求めています。
回答を見る
  • ベストアンサー

@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
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.2

use MIME::Base64;としたくないなら、require 'C:/Perl/lib/MIME/Base64.pm'; ついでながら、モジュール「HOGE::Fuga」がインストールされているか確認するなら コマンドラインから > perl -MHOGE::Fuga -e '' エラーが出なければインストールされています。

makoji
質問者

お礼

サイトで見つけたcheck.cgiなるプログラムの中を見ると、そんなに難しいプログラムではないなと思いましたが、これをいちいち組むとなると、やっぱりプログラムって大変ですね。 それがたった一行で解決できるのは魔法のようです。ありがとうございます。

その他の回答 (1)

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.1

> unshift @INC, "C:/Perl/lib/MIME"; 上の文は実行時に処理されるので、コンパイル時に処理される use 文の段階では @INC に追加されていないのでエラーになります。解消するには、いくつかの方法があると思います。 1) use MIME::BASE64; 2) use lib "C:/Perl/lib/MIME"; use BASE64; 3) 他にも PERL5LIB などの環境変数を設定する方法があります。OS やシェルによって設定方法が異なりますが、1度設定すれば自動的に @INC にパスが追加されます。

makoji
質問者

お礼

題意からするとこちらの方がベストアンサーだと思います。 そういえばuseとrequireの違いがあったなと思い出しました。日曜プログラマの悲しさというか。。。 ありがとうございます。

関連するQ&A

  • 添付ファイル保存perlの実行エラー

    お世話になります。 perl初心者です。 以下ののサイトから拾ってきたスクリプトを実行したところ、エラーがでて上手く実行されません。 http://www.jp-z.jp/perlmemo/parse_MIME-Parser_multipartmail.html ----- #!/usr/bin/perl use MIME::Parser; new MIME::Parser->parse(\*STDIN); ----- error message: Can't locate auto/Mail/Internet/autosplit.ix in @INC(@INC contains: C:/Perl/lib C:/Perl/site/lib .) at C:/Perl/lib/AutoLoader.pm line 100. at C:/Perl/lib/Mail/Internet.pm line 10 autosplit.ixが存在しないのかと思ったのですが、モジュールではないようなのでどうインストールするのかもよくわかりません。 詳しい方いらっしゃいましたらお助けください。。

  • YAMLについて

    perlの初心者の者です. 以下のようなサンプルソースを実行すると Can't locate auto/YAML/Syck/DumpYAML.al in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at C:/Perl/site/lib/YAML/Syck.pm line 113 というエラーが出てしまってyaml.txtに当然実行結果が書き込まれていません.原因はなんでしょうか?

  • Can't locate...

    こんにちは。Perl初心者で、 ネット上のPerlのサンプルプログラムを動かそうとしましたが 以下のようにエラーがでて実行できません。。 Can't locate Lingua/JA/Romanize/Japanese.pm in @INC (@INC contains: ./ /usr/local/lib/perl5/5.00504/i686-linux /usr/local/lib/perl5/5.00504 /usr/local/lib/perl5 /site_perl/5.005/i686linux /usr/local/lib/perl5/site_perl/5.005 .) at object.cgi line 4. BEGIN failed--compilation aborted at object.cgi line 4. これはどういったエラーで、どうすれば解決しますか。 教えてください。

  • @INCのパスを変更・追加する方法はありますか?

    現在Movable Typeの設定を行っておりますが インストール途中に以下のようなエラーメッセージが出力されます。 --- Can't locate MT/Bootstrap.pm in @INC (@INC contains: lib C:/Perl/site/lib C:/Perl/lib .) at X:\hoge\mt\mt.cgi line 12. BEGIN failed--compilation aborted at z:\hoge\mt\mt.cgi line 12. --- 調べてみると、Bootstrap.pmファイルが見つからないよという意味の エラーメッセージだという事がわかりました。 Bootstrap.pmファイルは存在しているのですが、@INCにファイルへのパスが通っていない為、このようなエラーメッセージが起こるのではないかと考えています。 そこで、@INCにパスを追加しようと思ったのですが、出来ませんでした。 コマンドプロンプトから c:\>perl -I <通したいパス> とすれば、@INCの値が更新されるのかと思ったらそういうわけでは無かったようで・・・ どのようにして、パスを追加すればよいのかわからなくなりました。 解決方法がありましたら、お願いいたします。

    • ベストアンサー
    • Perl
  • 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
  • 文法はあってるのにサーバーエラーが出る

    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
  • 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
  • Movable Typeのインストールについて

    Movable TypeをWebサーバーに入れ、Movable Typeシステム・チェック [mt-check.cgi]画面でMovable Typeに必要なコンポネントがサーバーに入っていることをチェックしてOKでした。 そしてmt/index.htmlよりインストールを行おうとしたのですが、 Got an error: Unsupported driver MT::ObjectDriver::DBM: Can't locate DB_File.pm in @INC (@INC contains: C:\***\cgi-bin\mt\extlib lib C:/Perl/lib C:/Perl/site/lib .) at lib/MT/ObjectDriver/DBM.pm line 10. BEGIN failed--compilation aborted at lib/MT/ObjectDriver/DBM.pm line 10. Compilation failed in require at (eval 6) line 1. BEGIN failed--compilation aborted at (eval 6) line 1. とエラーが出てしまいます。mt-config.cgiの設定が間違っているのでしょうか? どなたか教えてください。よろしくお願いします。

  • ActivePerl-5.10.0.1004の日本語対応にする方法

    超初心者の質問ですみません。 今、Perlの絵本でActivePerlの勉強中ですが use encording"shiftjis"; $a=1; print "はじめは$aでした。\n"; $a=++; print "1増えて$aになりました。\n"; $a=--; print "1減って$aに戻りました。\n"; を実行しても、 Can't locate encording.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib . ) at hello8.pl line 1. BEGIN failed--compilation aborted at hello8.pl line 1. と表示されます。 解消法を教えてください。