FindBin - 找出原始 perl 腳本的目錄
use FindBin;
use lib "$FindBin::Bin/../lib";
or
use FindBin qw($Bin);
use lib "$Bin/../lib";
找出腳本 bin 目錄的完整路徑,以允許使用相對於 bin 目錄的路徑。
這允許使用者為某些軟體設定目錄樹,其中包含目錄 <root>/bin
和 <root>/lib
,然後以上的範例將允許使用 lib 目錄中的模組,而不知道軟體樹安裝在哪裡。
如果使用 -e 選項呼叫 perl,或是從 STDIN
讀取 perl 腳本,則 FindBin 會將 $Bin
和 $RealBin
都設定為目前目錄。
$Bin - path to bin directory from where script was invoked
$Script - basename of script from which perl was invoked
$RealBin - $Bin with all links resolved
$RealScript - $Script with all links resolved
如果兩個模組在同一個直譯器下,從不同的目錄使用 FindBin
,這將無法運作。由於 FindBin
使用 BEGIN
區塊,因此只會執行一次,而且只有第一個呼叫者會正確執行。這是 mod_perl 和其他持續性 Perl 環境中的問題,在這些環境中不應使用這個模組。這也表示你應避免在計畫放到 CPAN 的模組中使用 FindBin
。要確保 FindBin
會運作,請呼叫 again
函式
use FindBin;
FindBin::again(); # or FindBin->again;
在 FindBin 的舊版本中,沒有 again
函式。解決方法是強制 BEGIN
區塊再次執行
delete $INC{'FindBin.pm'};
require FindBin;
FindBin 是 Perl 核心發行版的一部分。請在 https://github.com/Perl/perl5/issues 提交錯誤報告。
Graham Barr <gbarr@pobox.com> Nick Ing-Simmons <nik@tiuk.ti.com>
版權所有 (c) 1995 Graham Barr 與 Nick Ing-Simmons。保留所有權利。此程式為免費軟體;您可以在與 Perl 相同的條款下重新散布或修改它。