File::Spec::Unix - 用于 Unix 的 File::Spec,其他 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 上为 ".."。
给定一个文件名列表,删除所有引用父目录的文件名。(不删除符号链接,只删除 "."、".." 和等效项。)
返回一个真值或假值,分别表示在比较文件规范时字母大小写不重要或重要。
以路径作为参数,如果它是绝对路径,则返回真值。
这不会在 Unix、Win32、OS/2 或 Mac OS(经典版)上查询本地文件系统。它会查询 VMS 的工作环境(参见 "file_name_is_absolute" in File::Spec::VMS)。
不接受参数,返回环境变量 PATH 作为数组。
join 与 catfile 相同。
($volume,$directories,$file) = File::Spec->splitpath( $path );
($volume,$directories,$file) = File::Spec->splitpath( $path,
$no_file );
将路径拆分为卷、目录和文件名部分。在没有卷概念的系统上,返回 '' 作为卷。
对于没有语法区分文件名和目录的系统,假设最后一个文件是路径,除非 $no_file 为真或存在尾部分隔符或 /. 或 /..。在 Unix 上,这意味着 $no_file 为真将使此返回 ( '', $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 编写的代码。
版权所有 (c) 2004 年 Perl 5 维护者。保留所有权利。
本程序是自由软件;您可以根据与 Perl 本身相同的条款重新发布和/或修改它。
请在 https://github.com/Perl/perl5/issues 上提交错误报告。