我正在創建自己的模塊,我們稱之爲X::Y
。當然,該模塊將在文件X/Y.pm
中。perl模塊如何找到自己的路徑?
可以說Y
需要調用外部程序,prog
。理想情況下,我只想將prog
放入X
,所以我可以運行X/prog
。我想沒有硬編碼X/prog
的完整路徑,並且模塊不管當前的工作目錄集如何工作。
如何從模塊內部找到模塊的完整路徑?還是有更好的方法來做到這一點?
我正在創建自己的模塊,我們稱之爲X::Y
。當然,該模塊將在文件X/Y.pm
中。perl模塊如何找到自己的路徑?
可以說Y
需要調用外部程序,prog
。理想情況下,我只想將prog
放入X
,所以我可以運行X/prog
。我想沒有硬編碼X/prog
的完整路徑,並且模塊不管當前的工作目錄集如何工作。
如何從模塊內部找到模塊的完整路徑?還是有更好的方法來做到這一點?
當前正在執行的源文件的完整路徑由Perl的__FILE__
特殊字面量提供。
但是我寧願看到外部程序安裝在通常情況下的位置,那裏的路徑或者在Perl代碼中編碼爲常量,或者包含在PATH
環境變量中。
加載模塊後,其路徑位於全局變量%INC
中。爲了看它,你需要做一個簡單的換算:
::
在包名/
.pm
因此,要找到模塊X::Y
的位置,你會請看$INC{"X/Y.pm"}
。
鮑羅廷回答這個問題,但一些相關信息:
FindBin - 發現腳本從
Neil Bower's CPAN modules for getting a module's path(腳本本身內或由它加載一個封裝內使用)運行目錄 - 詳細審查用於查找其他模塊路徑的模塊。