目錄

名稱

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 相同的條款下重新散布或修改它。