在加载时查找Perl模块的路径

时间:2011-05-03 17:30:19

标签: perl module path environment

我正在使用一个加载库的传统Perl应用程序,称之为“blah”。我需要知道“blah”在我的文件系统中的位置。

我对Perl一点也不熟悉,我想知道在Python中使用特殊变量__file__的行来打印模块路径的等效方法是什么。换句话说,Perl等效于以下Python脚本:

import blah
print blah.__file__

非常感谢。

3 个答案:

答案 0 :(得分:7)

use blah;
print $INC{'blah.pm'};

use Blah1::Blah2::blah;
print $INC{'Blah1/Blah2/blah.pm'};

<小时/>

即使在Windows上,这个案例也很重要。 use Blah将为$INC{'Blah.pm'}创建一个条目,use blah将为$INC{'blah.pm'}创建一个条目。

C:\>perl -MList::util -e "print join $/, keys %INC"
XSLoader.pm
Carp.pm
warnings/register.pm
Exporter.pm
vars.pm
strict.pm
List/util.pm
warnings.pm

答案 1 :(得分:2)

要扩展我对暴徒回答的评论,请尝试更加宽松地使用%INC来帮助您:

#!/usr/bin/perl

use strict;
use warnings;

use blah;

foreach (keys %INC) {
  if (m'blah.pm') {
    print "$_ => $INC{$_}\n"; 
  }
}

关于此主题的相关perldoc perlvar

  

%INC

     

哈希%INC包含条目   对于通过do包含的每个文件名,   要求,或使用运营商。关键是   你指定的文件名(用   模块名称转换为路径名),   而值是该位置   找到的文件。 require运算符使用   这个哈希确定是否一个   特定文件已经存在   包括在内。

     

如果文件是通过   钩子(例如子程序参考,见   要求对这些进行描述   钩子),这个钩子是默认的   插入%INC代替a   文件名。但请注意,钩子   可能已自行设置%INC条目   提供更具体的信息。

如果即使这样做没有帮助,您可以像之前的文档所示,阅读有关require命令的内容,以帮助您了解如何首先加载它。这应该可以帮助您退出,可能是通过迭代@INC,这是Perl将搜索的文件夹,用于查找文件require d。

答案 2 :(得分:0)

found the following one-liner解决了我的问题:

$ perl -MList::Util -e'print $_ . " => " . $INC{$_} . "\n" for keys %INC'

-MList::Util代表List::Util模块(在我的情况下,我使用-MBlah