7

我正在创建自己的模块,让我们称之为X::Y。当然,模块会在文件中X/Y.pm

假设Y需要调用外部程序,prog. 理想情况下,我只想投入prog进去X,这样我就可以跑步了X/prog。我希望没有硬编码X/prog的完整路径,并且无论当前工作目录集如何,模块都能正常工作。

如何从模块内部找到模块的完整路径?还是有更好的方法来做到这一点?

4

3 回答 3

10

当前正在执行的源文件的完整路径由 Perl 的__FILE__特殊文字提供。

但是,我希望看到外部程序安装在通常的位置,并且那里的路径要么在 Perl 代码中编码为常量,要么包含在PATH环境变量中。

于 2012-11-26T03:10:17.867 回答
4

Borodin 回答了这个问题,但提供了一些相关信息:

FindBin - 查找运行脚本的目录(在脚本本身或由它加载的包中使用)

Neil Bower 的用于获取模块路径的 CPAN 模块- 详细查看模块以查找另一个模块的路径。

于 2012-11-26T14:54:32.010 回答
0

一旦加载了一个模块,它的路径就在全局%INC变量中。要查找它,您需要进行简单的转换:

  1. ::将包名称更改为/
  2. 附加.pm

因此,要查找模块的位置X::Y,您需要查看$INC{"X/Y.pm"}.

于 2012-11-26T04:32:44.857 回答