我想将Perl包名称转换为文件的完整路径.
say package_name_to_path('Foo::Bar::Baz'); /tmp/Foo/Bar/Baz.pm
我知道有一个CPAN模块可以做到这一点?我再也找不到了?
如果您已加载模块,只需查看%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的模块.