当前位置:  开发笔记 > 编程语言 > 正文

如何找到Perl包的文件名?

如何解决《如何找到Perl包的文件名?》经验,为你挑选了1个好方法。

我想将Perl包名称转换为文件的完整路径.

say package_name_to_path('Foo::Bar::Baz');
/tmp/Foo/Bar/Baz.pm

我知道有一个CPAN模块可以做到这一点?我再也找不到了?



1> Schwern..:

如果您已加载模块,只需查看%INC,但您必须按文件名进行操作.

say $INC{"Foo/Bar/Baz.pm"};

如果还没有,可以使用Module :: Util或Module :: Info附带的module_info程序.

$ module_info Module::Build

Name:        Module::Build
Version:     0.30
Directory:   /usr/local/lib/site_perl
File:        /usr/local/lib/site_perl/Module/Build.pm
Core module: no

或者您可以手动浏览@INC.

my $module = "Foo::Bar";

# Convert from Foo::Bar to Foo/Bar.pm
my $file   = $module;
$file =~ s{::}{/};
$file .= ".pm";

my $path;
for my $dir (@INC) {
    $path = "$dir/$file";
    last if -r $path;
    $path = undef;
}

say defined $path ? "$module is found at $path" : "$module not found";

(完全跨平台的解决方案将使用File :: Spec而不是使用斜杠连接.)

如果你只需要快速找到一个模块,perldoc -l就像Fayland提到的那样运行良好,但它找不到没有POD的模块.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有