• ベストアンサー

perl CGIでの@INC

たびたびお世話になります。 perl CGIを作っています。作っているCGIとは別のディレクトリにあるファイルをrequireしたいのですが、リモートログインできないレンタルサーバのため@INCのいじり方がわかりません。 こういった場合のrequire方法(あるいはプログラム再利用方法)をお教えください

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

  • ベストアンサー
  • heburusu
  • ベストアンサー率85% (140/164)
回答No.1

BEGIN文の中で@INCにパスを追加する方法はどうでしょうか? -- BEGIN { push(@INC, '/usr/local/sbin'); }

参考URL:
http://www.ksknet.net/perl/inc.html
nagaon
質問者

補足

情報ありがとうございます。 BEGIN { push(@INC, '/home/e07999/lib'); } という一文をcgiの頭近くにいれました。このcgiを実行すると、以下のエラーとなりました。(e07999は私のユーザ名です) Software error: Can't locate init.cgi in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/lib/site_perl . /home/e07999/lib) at admin_1.cgi line 18. /home/e07999/libの中にinit.cgiは入れてあるし、属性は705にしています。。。。 ひきつづきご指導ください。

その他の回答 (3)

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

/hoge/e07999 は実ディレクトリなのでしょうか? 単にマップされているだけなのでは? その場合は、@INC にディレクトリを追加できるものの、何も見つからないということになります。 @INC の中にカレントディレクトリ (.) が入っているので、自分のディレクトリの範囲内の相対パスを require に渡せば実行できるように思います。 require "lib/init.cgi"; require "../lib/init.cgi"; # 等など

回答No.3

>Can't locate init.cgi in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/lib/site_perl . /home/e07999/lib) at admin_1.cgi line 18. >/home/e07999/libの中にinit.cgiは入れてあるし、属性は705にしています。。。。 エラー中の@INCに、 /home/e07999/lib があって /home/e07999/lib/init.cgi のパーミッションが705なのに requireできないといういうことなら、 init.cgiのあるディレクトリやその親ディレクトリに、パーミッションで許可されてないということでは? たとえば、/home/e07999/ が 700になってるのに、CGIで使おうとしているとか。

nagaon
質問者

お礼

ご指摘のとおり親のパーミッションに問題があるようでした。ありがとうございました。

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.2

CGIから@INCをブラウザーで表示し、確認してみたら。

nagaon
質問者

お礼

そのとおりですね。ただし今回は、エラーメッセージの中に@INCが表示されていましたが、表示されない場合は 確認してみます。