- ベストアンサー
perl CGIでの@INC
たびたびお世話になります。 perl CGIを作っています。作っているCGIとは別のディレクトリにあるファイルをrequireしたいのですが、リモートログインできないレンタルサーバのため@INCのいじり方がわかりません。 こういった場合のrequire方法(あるいはプログラム再利用方法)をお教えください
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
BEGIN文の中で@INCにパスを追加する方法はどうでしょうか? -- BEGIN { push(@INC, '/usr/local/sbin'); }
その他の回答 (3)
- kumoz
- ベストアンサー率64% (120/185)
/hoge/e07999 は実ディレクトリなのでしょうか? 単にマップされているだけなのでは? その場合は、@INC にディレクトリを追加できるものの、何も見つからないということになります。 @INC の中にカレントディレクトリ (.) が入っているので、自分のディレクトリの範囲内の相対パスを require に渡せば実行できるように思います。 require "lib/init.cgi"; require "../lib/init.cgi"; # 等など
- superside0
- ベストアンサー率64% (463/719)
>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で使おうとしているとか。
お礼
ご指摘のとおり親のパーミッションに問題があるようでした。ありがとうございました。
- Wap58
- ベストアンサー率33% (29/87)
CGIから@INCをブラウザーで表示し、確認してみたら。
お礼
そのとおりですね。ただし今回は、エラーメッセージの中に@INCが表示されていましたが、表示されない場合は 確認してみます。
補足
情報ありがとうございます。 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にしています。。。。 ひきつづきご指導ください。