我正在使用一个加载库的传统Perl应用程序,称之为“blah”。我需要知道“blah”在我的文件系统中的位置。
我对Perl一点也不熟悉,我想知道在Python中使用特殊变量__file__
的行来打印模块路径的等效方法是什么。换句话说,Perl等效于以下Python脚本:
import blah
print blah.__file__
非常感谢。
答案 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
)