我正在创建自己的模块,让我们称之为X::Y。当然,模块会在文件中X/Y.pm。
假设Y需要调用外部程序,prog. 理想情况下,我只想投入prog进去X,这样我就可以跑步了X/prog。我希望没有硬编码X/prog的完整路径,并且无论当前工作目录集如何,模块都能正常工作。
如何从模块内部找到模块的完整路径?还是有更好的方法来做到这一点?
我正在创建自己的模块,让我们称之为X::Y。当然,模块会在文件中X/Y.pm。
假设Y需要调用外部程序,prog. 理想情况下,我只想投入prog进去X,这样我就可以跑步了X/prog。我希望没有硬编码X/prog的完整路径,并且无论当前工作目录集如何,模块都能正常工作。
如何从模块内部找到模块的完整路径?还是有更好的方法来做到这一点?
当前正在执行的源文件的完整路径由 Perl 的__FILE__特殊文字提供。
但是,我希望看到外部程序安装在通常的位置,并且那里的路径要么在 Perl 代码中编码为常量,要么包含在PATH环境变量中。
Borodin 回答了这个问题,但提供了一些相关信息:
FindBin - 查找运行脚本的目录(在脚本本身或由它加载的包中使用)
Neil Bower 的用于获取模块路径的 CPAN 模块- 详细查看模块以查找另一个模块的路径。
一旦加载了一个模块,它的路径就在全局%INC变量中。要查找它,您需要进行简单的转换:
::将包名称更改为/.pm因此,要查找模块的位置X::Y,您需要查看$INC{"X/Y.pm"}.