当参数为绝对路径名时,File::Basename::dirname是否始终返回父目录或根目录



是否存在此子例程(使用非根目录的有效路径调用)不返回父目录的情况?

use Cwd qw( realpath );
use File::Basename qw( dirname );
sub parent_dir {
    my $dir = realpath shift;
    return dirname $dir;
}

File::Basename文档提到了这个警告:

dirname

提供此函数是为了与Unix shell兼容命令dirname(1),并继承了它的一些怪癖。尽管它所做的名称NOT总是返回目录名可能会想到。为了安全起见,如果您希望路径的目录名使用fileparse()

列举了几个例子,说明了这一点:

+----------------+-----------+---------------+
| Test Path      | dirname() | fileparse()   |
+----------------+-----------+---------------+
| /foo/bar/baz   | /foo/bar  | /foo/bar/     |  # dirname() works as expected
+----------------+-----------+---------------+
| /foo/bar/baz/  | /foo/bar  | /foo/bar/baz/ |  # Should have included baz here
+----------------+-----------+---------------+
| foo/           | .         | foo/          |  # fileparse() wins again
+----------------+-----------+---------------+

如果提供了简单目录和文件路径的绝对路径(没有尾部斜杠),则路径与第一个测试类似,这意味着始终返回父目录。

相关内容

  • 没有找到相关文章

最新更新