我正在创建自己的模块,我们称之为X::Y
。当然,该模块将位于文件X/Y.pm
中。
让我们说Y
需要调用外部程序prog
。理想情况下,我只想将prog
放入X
,这样我就可以运行X/prog
。我希望没有硬编码X/prog
的完整路径,并且无论当前工作目录集如何,模块都可以工作。
如何从模块内部找到模块的完整路径?或者有更好的方法吗?
答案 0 :(得分:10)
当前正在执行的源文件的完整路径由Perl的__FILE__
特殊文字提供。
但是我更希望看到外部程序安装在正常情况下,并且路径在Perl代码中编码为常量或包含在PATH
环境变量中。
答案 1 :(得分:4)
鲍罗丁回答了这个问题但有些相关信息:
FindBin - 找到运行脚本的目录(在脚本本身内或在由其加载的包中使用)
Neil Bower's CPAN modules for getting a module's path - 详细审查模块以找到另一个模块的路径。
答案 2 :(得分:-1)
加载模块后,它的路径位于全局%INC
变量中。要查找,您需要进行简单的转换:
::
更改为/
.pm
为了找到模块X::Y
的位置,您可以查看$INC{"X/Y.pm"}
。