File::Spec::Unix - File::Spec for Unix,其他 File::Spec 模組的基礎
require File::Spec::Unix; # Done automatically by File::Spec
用於操作檔案規格的方法。其他 File::Spec 模組(例如 File::Spec::Mac)會繼承自 File::Spec::Unix 並覆寫特定方法。
不實際檢查檔案系統,但會對路徑進行邏輯清理。在 UNIX 上,會消除連續斜線和連續的「/。」。
$cpath = File::Spec->canonpath( $path ) ;
請注意,這*不會*將 x/../y 區段壓縮成 y。這是設計使然。如果系統上的 /foo 是指向 /bar/baz 的符號連結,那麼 /foo/../quux 實際上是 /bar/quux,而不是天真的 ../ 移除會給你的 /quux。如果你想執行這類處理,你可能需要 Cwd
的 realpath()
函式來實際遍歷檔案系統,清理像這樣的路徑。
連結兩個或以上的目錄名稱,以形成一個以目錄結尾的完整路徑。但從結果字串中移除尾斜線,因為它看起來不好看、沒有必要,而且會讓 OS2 混淆。當然,如果這是根目錄,就不要切斷尾斜線 :-)
連結一個或以上的目錄名稱和一個檔名,以形成一個以檔名結尾的完整路徑
傳回目前目錄的字串表示形式。UNIX 上為「.」。
傳回空裝置的字串表示形式。UNIX 上為「/dev/null」。
傳回根目錄的字串表示形式。UNIX 上為「/」。
傳回下列清單中第一個可寫入目錄的字串表示形式,如果清單中沒有可寫入的目錄,則傳回目前目錄。
$ENV{TMPDIR}
/tmp
如果在污染模式下執行,且 $ENV{TMPDIR} 受到污染,則不會使用它。
傳回父目錄的字串表示形式。UNIX 上為「..」。
提供檔案名稱清單,移除其中指向父目錄的檔案名稱。(不會移除符號連結,只會移除「.」、「..」及其等效名稱。)
傳回 true 或 false 值,分別表示比較檔案規格時,字母是否不重要或很重要。
將路徑作為引數,如果路徑是絕對路徑,則傳回 true。
這不會在 Unix、Win32、OS/2 或 Mac OS(傳統)上查詢本機檔案系統。它會在 VMS 中查詢工作環境(請參閱 "File::Spec::VMS 中的 file_name_is_absolute")。
不接受引數,將環境變數 PATH 傳回為陣列。
join 與 catfile 相同。
($volume,$directories,$file) = File::Spec->splitpath( $path );
($volume,$directories,$file) = File::Spec->splitpath( $path,
$no_file );
將路徑分割成磁碟區、目錄和檔案名稱部分。在沒有磁碟區概念的系統上,會傳回 '' 表示磁碟區。
對於沒有語法區分檔案名稱和目錄的系統,會假設最後一個檔案是路徑,除非 $no_file 為 true 或存在尾隨分隔符號、/. 或 /..。在 Unix 上,這表示 $no_file 為 true 會讓此函式傳回 ( '', $path, '' )。
目錄部分可能會或可能不會傳回尾隨「/」。
結果可以傳遞給 "catpath()" 以取得等於(通常與相同)原始路徑的路徑。
"catdir()" 的相反函式。
@dirs = File::Spec->splitdir( $directories );
$directories 必須僅為具有磁碟區概念或具有區分檔案與目錄路徑語法的系統上的路徑目錄部分。
與僅在分隔符上分割目錄不同,可以傳回空目錄名稱 (''
),因為這些名稱在某些作業系統中很重要。
在 Unix 上,
File::Spec->splitdir( "/a/b//c/" );
產生
( '', 'a', 'b', '', 'c', '' )
採用磁碟區、目錄和檔案部分,並傳回完整路徑。在 Unix 上,$volume 會被忽略,而目錄和檔案會被串接。如果需要,會插入「/」(但如果目錄部分並未以「/」開頭,則不會加入)。在其他作業系統上,$volume 非常重要。
採用目的地路徑和選用基礎路徑,從基礎路徑傳回目的地路徑的相對路徑
$rel_path = File::Spec->abs2rel( $path ) ;
$rel_path = File::Spec->abs2rel( $path, $base ) ;
如果 $base 不存在或為「」,則會使用 cwd()。如果 $base 為相對路徑,則會使用 "rel2abs()" 將其轉換為絕對形式。這表示它會被視為相對於 cwd()。
在具有表示檔名的語法的系統上,這會忽略 $base 檔名。否則,所有路徑組件都會假設為目錄。
如果 $path 為相對路徑,則會使用 "rel2abs()" 將其轉換為絕對形式。這表示它會被視為相對於 cwd()。
不會針對檔案系統進行任何檢查,因此如果 $base
包含符號連結,結果可能不正確。(如果這是個問題,請事先套用 Cwd::abs_path()。)在 VMS 上,會與工作環境互動,因為會擴充邏輯和巨集。
根據 Shigio Yamaguchi 編寫的程式碼。
將相對路徑轉換為絕對路徑。
$abs_path = File::Spec->rel2abs( $path ) ;
$abs_path = File::Spec->rel2abs( $path, $base ) ;
如果 $base 不存在或為「」,則會使用 cwd()。如果 $base 為相對路徑,則會使用 "rel2abs()" 將其轉換為絕對形式。這表示它會被視為相對於 cwd()。
在具有表示檔名的語法的系統上,這會忽略 $base 檔名。否則,所有路徑組件都會假設為目錄。
如果 $path 為絕對路徑,則會使用 "canonpath()" 清理並傳回。
不會針對檔案系統進行任何檢查。在 VMS 上,會與工作環境互動,因為會擴充邏輯和巨集。
根據 Shigio Yamaguchi 編寫的程式碼。
Perl 5 Porters 保留所有權利,版權所有 (c) 2004。
此程式為自由軟體;您可以在與 Perl 本身相同的條款下重新散布或修改它。
請在 https://github.com/Perl/perl5/issues 提交錯誤報告。