プロが教える店舗&オフィスのセキュリティ対策術

perlスクリプトをcrontabで、
  0 * * * * /フルパス
と起動したところ、
上記のエラーがでます。
エラー部分は、
  require './jcode.pl';
です。
requireにフルパスを打ったら、直ったんですが、なぜでしょう。
Perlの設定が悪いのでしょうか?

A 回答 (2件)

> ということで、環境変数のSCRIPT_FILE_NAMEの最後をカットして、


> jcode.plの前にくっつけるってことで良いでしょうかね。

WebからCGIとして実行した場合と、telnetなどから実行した場合とで、環境変数の中身は変わります。
SCRIPT_FILENAMEはCGIの時しかつかないと思いますので、特殊変数 $0 を参照し
  (my $path = $0) =~ s|/.+?$||;
  require "$path/jcode.pl";
のようにした方が良いでしょう。
    • good
    • 2
この回答へのお礼

確かに、SCRIPT_FILENAMEは、telnetではでませんでした。
$0なんですね。ありがとうございました。

教えていただいたコードが良くわからなかったので、

$0 =~ /(.*)\/(.*)/;
require $1.'/jcode';

として、うまくいきました。

お礼日時:2002/12/06 19:28

普段はそのスクリプトのあるディレクトリで実行しているんでしょうね。


crontabがスクリプトを起動する際のカレントディレクトリはどこか、ということを考えれば分かりますよね。

この回答への補足

requireでも、カレントディレクトリが、
実行時のシェルのカレントディレクトリになるんですね。

ということで、環境変数のSCRIPT_FILE_NAMEの最後をカットして、
jcode.plの前にくっつけるってことで良いでしょうかね。

補足日時:2002/12/06 10:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A