• ベストアンサー

Can't locate jcode.pl in @INC...

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

  • Perl
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

> ということで、環境変数のSCRIPT_FILE_NAMEの最後をカットして、 > jcode.plの前にくっつけるってことで良いでしょうかね。 WebからCGIとして実行した場合と、telnetなどから実行した場合とで、環境変数の中身は変わります。 SCRIPT_FILENAMEはCGIの時しかつかないと思いますので、特殊変数 $0 を参照し   (my $path = $0) =~ s|/.+?$||;   require "$path/jcode.pl"; のようにした方が良いでしょう。

petit-C
質問者

お礼

確かに、SCRIPT_FILENAMEは、telnetではでませんでした。 $0なんですね。ありがとうございました。 教えていただいたコードが良くわからなかったので、 $0 =~ /(.*)\/(.*)/; require $1.'/jcode'; として、うまくいきました。

その他の回答 (1)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

普段はそのスクリプトのあるディレクトリで実行しているんでしょうね。 crontabがスクリプトを起動する際のカレントディレクトリはどこか、ということを考えれば分かりますよね。

petit-C
質問者

補足

requireでも、カレントディレクトリが、 実行時のシェルのカレントディレクトリになるんですね。 ということで、環境変数のSCRIPT_FILE_NAMEの最後をカットして、 jcode.plの前にくっつけるってことで良いでしょうかね。

関連するQ&A

  • jcode.plが読み込めない

    ホスティングを使用しています。 plファイルについて、以前のサーバはちゃんと動作していましたが、 新しいサーバで、jcode.plが読み込めないらしくInternal Server Errorが出てしまっています。 階層は httpdocs--test.pl |--cmn--jcode.pl にしています。 ログを見ると [error] Can't locate cmn/jcode.pl in @INC 17行目部分、つまりrequire 'cmn/jcode.pl';があるところがエラーになってます。 以前は読み込めているのに、新しいサーバでは読み込めていない。 ちなみに ・パーミッションはちゃんと変更していますtext.pl[755] ・httpdocs自体は.htaccessでpl自体は動作できています つまり、 require行を外すとページはきちんと表示されます。 となると考えられる原因はなんでしょうか? そして対策方法を教えて頂ければと思います。 よろしくお願いいたします。

  • jcode.pl と &ReadParse()

    CGIファイルの先頭は #!/usr/local/bin/perl require './cgi-lib.pl'; require './jcode.pl'; &ReadParse(); という感じになっています。 ここでのの require は、日本語を使うためのもの だと思っています。合っていますか? &ReadParse() というのは何ですか? require と関係があるみたいです。 require を書かずに &ReadParse() を書くとCGIエラーになります。

    • ベストアンサー
    • CGI
  • jcode.pl

    日記などのスクリプトを作成しているのですが、とりあえず今まで、そこまでの理由もわからず他のスクリプトに習ってjcode.plをデコード処理部で &jcode'convert(*value,'sjis'); &jcode'convert(*name,'sjis'); のように使ってきました。 ですが、たまたま今回、jcode.pl等を書き忘れてしまったのですが、ブラウザから投稿してみても文字化けという文字化けが起こりません。スクリプト自身はsjisで書いています。ログファイルもどうやらsjisコードで書き込まれているようなのですが、それでもjcode.plは必要なのでしょうか。windows XP にApache + Active Perl での動作と、@niftyで設置して動作を確認しました。 この場合、jcode.plは必要あるのでしょうか?

    • ベストアンサー
    • Perl
  • jcode.plについて

    次のエラーが発生します。 Undefined subroutine &jcode::convf called at ./jcode.pl line 291. カレントに、jcode.plを置いているだけでは動作するのでしょうか? また、Jcode.pmを使った場合、 &Jcode::convert(\$test_sjis, "sjis"); と大文字にしないといけないのですが、これは仕方ないことでしょうか? てっきり、 require './jcode.pl'と use Jcode.pmの差し替えで済むと思っていました。 #!/usr/bin/perl require './jcode.pl'; my $test = "パソコン結構です。"; #文字化けチェック用 my $test_sjis = $test; my $test_ujis = $test; my $test_jis = $test; &jcode::convert(\$test_sjis, "sjis"); &jcode::convert(\$test_ujis, "ujis"); &jcode::convert(\$test_jis, "jis"); print "\$test_sjis=[$test_sjis]\n"; print "\$test_ujis=[$test_ujis]\n"; print "\$test_jis =[$test_jis]\n"; exit; __END__

    • ベストアンサー
    • Perl
  • 「jcode.pl」というファイルはどこにUPすべきでしょう?

    「jcode.pl」というファイルはどこにUPすべきでしょう? ただいまサーバー移転をしているのですが(サーバー移転は初めてです) 移転後、ひとつひとつファイルを確認していると「jcode.pl」というファイルを発見しました。 拡張子から、Perlで記述されたプログラムかな?と判断いたしました。 もしそうならば、サーバーで指定されているPerlのパスにしたがって移動させるべきでしょうか? ちなみにこのファイルは、サーバーの(いじれる部分の)第2階層にはいっています。 Perlのパスは /usr/local/bin/perl です。 しかし、上記のパスの位置に、私が入って行くことは出来ません。 動かす必要はあるのでしょうか? 当方初心者です。まとはずれな質問をしているかもしれませんが どうぞよろしくお願い致します。

  • jcode.plアップロード不要の場合の設定変更

    CGI設置にあたり、設定変更で悩んでいます。 jcode.plがサーバーにプリインストールされているためアップロードは不要で、require 'jcode.pl'; と記載するようにとのことです。 require "./jcode.pl"; となっているものについては問題なかったのですが、 $jcode = './jcode.pl'; 中略 require $jcode; と記述されているものを、どのように書き換えたらよいのか分かりません。 ご教授のほど、どうぞよろしくお願い致します。

    • 締切済み
    • CGI
  • jcode.plの使い方

    最近cgiを始めたばかりの者です。 HTMLでフォームを作り、 FORM action="view.cgi"method="GET" でcgiに渡すようにしました。 CGIで受け取った文字に全角があると %83%8B%83i%83e%83B%83N%83X のような文字化けをします。 調べてみたところjcode.plを使えば 文字化けを回避できるようですがうまく いきませんでした。 質問1.jcode.plを読み込ませるのは 上記のview.cgiで良いのでしょうか。 質問2.require "jcode.pl";といれた後 具体的にどのように受け取ったデータを jcodeに渡せばいいのでしょうか? @data = split(/&/,$ENV{QUERY_STRING}); で@dataに受け取った情報を渡しています。 ご教授頂ければと思います。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • CGIでjcode.plを読み込めなくなりました

    さんざん検索をかけて色々試したのですが、どうしても解決できず どなたかご存知のかた、教えてください。よろしくお願い致します。 つい昨日までちゃんと動いていたCGIが突然 「jcode.plがありません」 と訴えてきました。 4月にサーバーを乗換え丸2ヶ月、問題なく動いていたのに 突然です。何がなんだか分かりません。 もちろん、このCGIに関わるファイルは一切いじっておりません。 自分なりに検討した結果 引っかかっているのは以下のコード # 漢字コード変換ライブラリを読み込む if (-f "jcode.pl") { require "jcode.pl"; } else { &errexit("jcode.plがありません。\n"); } -略- &jcode'convert(*tmp, $kcode_cgi); このふたつです。jcode.plを読み込めない為にもれなく後出の呪文が効かないんだろうなという事は推測しているのですが。 このためフルパスでも試しましたが変化なし。 この読み込みをしなければ、CGIは取りあえず表示します。 なので、日本語変換プログラム以外は正常に動作しているようです。 どなたか同じような経験の有る方いらっしゃいませんか? アドバイスよろしくお願い致します。

    • ベストアンサー
    • CGI
  • jcode.plのかわり

    jcode.plの jcode::tr() のかわりを探しています。 jcode.plの jcode::tr(\$val,'0-9A-Za-z ()_@-','0-9A-Za-z ()_@-'); をPerl5.18.2で使用するとエラーが出てしまいます。これを回避したい。 プログラムがUTF-8であれば $val =~ tr/0-9A-Za-z ()_@-/0-9A-Za-z ()_@-/; のようにすれば実現可能みたいですが、プログラムはEUCで書かれています。 影響範囲からプログラムの文字コードをかえることはできれば避けたい。 一文字ずつ変換することも考えましたが、この方法ではパフォーマンスに懸念があります。 jacode.plなるものもありますが、これに置き換えるだけでは文字化けしてしまいました。 jcode::tr()のかわりになるような手段はあるのでしょうか?

    • ベストアンサー
    • Perl
  • 'cgi-lib.pl'などのファイルの位置は?

    Perlの基本的な質問ですが、cgi-lib.plやjcode.plは どのディレクトリに入れれば自然でしょうか? 私はLinuxとWindowsの両方にPerl5.6を入れておりまして、今までは相対パスによって、スクリプトの近くに置いていましたが、ディレクトリ(フォルダ)が変わるごとに設定しなおしで面倒になってきました。 WEBでもレンタルサーバーなど利用したことは無いんですが、このような基本ライブラリは、require 'cgi-lib.pl';で呼び出して?いると思いますが、 しかるべき位置にこのファイルが無いとだめだと思います。ご教授ください。

    • ベストアンサー
    • Perl