1
我有一個使用FindBin模塊的Perl腳本的集合。有一些腳本使用的數據文件,並期望在$FindBin::Bin/../share/somedir/
中找到它們。我正在自定義安裝,以便現在存在的這些文件是/some/other/share/dir/
。有沒有什麼辦法可以像定義一個環境變量那樣自定義FindBin的行爲?更改Perl的FindBin行爲
我有一個使用FindBin模塊的Perl腳本的集合。有一些腳本使用的數據文件,並期望在$FindBin::Bin/../share/somedir/
中找到它們。我正在自定義安裝,以便現在存在的這些文件是/some/other/share/dir/
。有沒有什麼辦法可以像定義一個環境變量那樣自定義FindBin的行爲?更改Perl的FindBin行爲
我不認爲你可以解決這個問題FindBin
模塊,因爲它的設計來解決特定的問題:找到原來的Perl腳本的目錄。 您應該實現自己的模塊來獲取配置參數。這看起來像:
package MyConfig;
use strict; use warnings;
use FindBin;
sub get_data_folder {
return ($ENV{'DEV_ENVIROMENT'} ? ## create this variable in your development
$FindBin::Bin."/../share/somedir/" :
"/some/other/share/dir/"
);
}
1;
這將允許您在一個位置控制所有的配置路徑。但是你需要改變存在的代碼。
這個問題是我正在安裝別人的Perl腳本的包。你認爲我唯一的解決方案是重寫腳本以適合我的模型嗎? – ajwood
你也可以創建一個從'$ InstallFolder /../share/ somedir /'到'/ some/other/share/dir /'的符號鏈接(如果你的操作系統支持的話)。因此,真正的文件將位於您需要的文件夾中,但腳本將使用舊路徑。 –
這是一個好主意,但在我的情況下不起作用。如果我更新'share'中的文件(並更改符號鏈接指向那裏),我需要允許用戶以某種方式使用舊的共享目錄運行腳本。 – ajwood