perl模块如何找到自己的路径?

时间:2012-11-26 01:53:33

标签: perl perl-module

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

让我们说Y需要调用外部程序prog。理想情况下,我只想将prog放入X,这样我就可以运行X/prog。我希望没有硬编码X/prog的完整路径,并且无论当前工作目录集如何,模块都可以工作。

如何从模块内部找到模块的完整路径?或者有更好的方法吗?

3 个答案:

答案 0 :(得分:10)

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

但是我更希望看到外部程序安装在正常情况下,并且路径在Perl代码中编码为常量或包含在PATH环境变量中。

答案 1 :(得分:4)

鲍罗丁回答了这个问题但有些相关信息:

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

Neil Bower's CPAN modules for getting a module's path - 详细审查模块以找到另一个模块的路径。

答案 2 :(得分:-1)

加载模块后,它的路径位于全局%INC变量中。要查找,您需要进行简单的转换:

  1. 将包名称中的::更改为/
  2. 追加.pm
  3. 为了找到模块X::Y的位置,您可以查看$INC{"X/Y.pm"}