2011-07-12 30 views
1

我有一個使用FindBin模塊的Perl腳本的集合。有一些腳本使用的數據文件,並期望在$FindBin::Bin/../share/somedir/中找到它們。我正在自定義安裝,以便現在存在的這些文件是/some/other/share/dir/。有沒有什麼辦法可以像定義一個環境變量那樣自定義FindBin的行爲?更改Perl的FindBin行爲

回答

2

我不認爲你可以解決這個問題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; 

這將允許您在一個位置控制所有的配置路徑。但是你需要改變存在的代碼。

+0

這個問題是我正在安裝別人的Perl腳本的包。你認爲我唯一的解決方案是重寫腳本以適合我的模型嗎? – ajwood

+0

你也可以創建一個從'$ InstallFolder /../share/ somedir /'到'/ some/other/share/dir /'的符號鏈接(如果你的操作系統支持的話)。因此,真正的文件將位於您需要的文件夾中,但腳本將使用舊路徑。 –

+0

這是一個好主意,但在我的情況下不起作用。如果我更新'share'中的文件(並更改符號鏈接指向那裏),我需要允許用戶以某種方式使用舊的共享目錄運行腳本。 – ajwood