重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

特殊配列@INCについて知ったのですが、
いまひとつイメージが湧きません。

ライブラリを使う際と、
モジュールを使う際に、@INCは活躍しているようですが、
そもそも、これはActivePerlなどの中に元から含まれているものなのでしょうか?

また、コーディングの際に、@INCの存在を意識する必要はあるのでしょうか?

A 回答 (2件)

@INC は %ENV などと同様に、Perl が自動的に用意している変数です。


「ActivePerlなどの中に元から含まれている」と考えて差し支えないでしょう。

コーディングの際に @INC で気を付けなければならないのは、カレントディレクトリが評価されるのは一番最後だという点です。
つまり、カレントディレクトリを表す "." が @INC の最後に入っているのです。

例えば、自分で stat.pl というファイルを作り、メインとなるスクリプトと同じディレクトリに置いたとします。
メインスクリプトの中で
  require "stat.pl";
と書いたとしても、@INC の途中のパスでファイルが見つかれば そちらがロードされてしまうのです。
(stat.pl は実際に存在するため、この問題がおきます。)

というわけで、私はいつもフルパス指定をしています。
    • good
    • 0
この回答へのお礼

遅くなりまして申し訳ございません。
ありがとうございます。

カレントディレクトリが一番最後に評価されるとなると、
たしかに問題になりますよね。

ちょっと私には難しいですが、フルパスで指定するほうがよさそうですね。

ありがとうございました。

お礼日時:2003/05/21 13:09

use Yourmodule;


などと宣言しておいたはずなのに認識してくれないことがあります。

(というのも、
 "."はPerlプロセスのカレントディレクトリを指していて、
 プログラムのディレクトリそのものではないからなのですが・・)

use FindBin;
use lib $FindBin::Bin;
use Yourmodule;

などと回避してやるなどの方法も参考までに・・。
#表現がちょっと変ですみません(^^;
    • good
    • 0
この回答へのお礼

ありがとうございます。

そうですね、回避する方法もあるんですね。
わかりました。
もっと勉強いたします。

ありがとうございました。

お礼日時:2003/05/21 13:10

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