0

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

use Cwd qw( realpath );
use File::Basename qw( dirname );

sub parent_dir {
    my $dir = realpath shift;
    return dirname $dir;
}
4

1 回答 1

3

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

dirname

提供此功能是为了与 Unix shell 命令兼容,dirname(1)并继承了它的一些怪癖。尽管它有它的名字,但它并不总是像您期望的那样返回目录名称。为了安全起见,如果您想要路径的目录名称,请使用 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
+----------------+-----------+---------------+

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

于 2014-04-13T08:03:28.360 回答