- ベストアンサー
Can't locate jcode.pl in @INC...
perlスクリプトをcrontabで、 0 * * * * /フルパス と起動したところ、 上記のエラーがでます。 エラー部分は、 require './jcode.pl'; です。 requireにフルパスを打ったら、直ったんですが、なぜでしょう。 Perlの設定が悪いのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> ということで、環境変数のSCRIPT_FILE_NAMEの最後をカットして、 > jcode.plの前にくっつけるってことで良いでしょうかね。 WebからCGIとして実行した場合と、telnetなどから実行した場合とで、環境変数の中身は変わります。 SCRIPT_FILENAMEはCGIの時しかつかないと思いますので、特殊変数 $0 を参照し (my $path = $0) =~ s|/.+?$||; require "$path/jcode.pl"; のようにした方が良いでしょう。
その他の回答 (1)
- leaz024
- ベストアンサー率75% (398/526)
回答No.1
普段はそのスクリプトのあるディレクトリで実行しているんでしょうね。 crontabがスクリプトを起動する際のカレントディレクトリはどこか、ということを考えれば分かりますよね。
質問者
補足
requireでも、カレントディレクトリが、 実行時のシェルのカレントディレクトリになるんですね。 ということで、環境変数のSCRIPT_FILE_NAMEの最後をカットして、 jcode.plの前にくっつけるってことで良いでしょうかね。
お礼
確かに、SCRIPT_FILENAMEは、telnetではでませんでした。 $0なんですね。ありがとうございました。 教えていただいたコードが良くわからなかったので、 $0 =~ /(.*)\/(.*)/; require $1.'/jcode'; として、うまくいきました。