在给定文件路径的情况下,如何获得第一个现有的祖先目录?

Ric*_*uen 1 directory perl filepath file-exists

在Perl中,如果给定文件路径,您如何找到第一个现有的祖先?

例如:

  • 如果给定路径/opt/var/DOES/NOT/EXIST/wtv/blarg.txt和目录/opt/var/DOES/不存在但目录/opt/var/是,则结果应为/opt/var/.
  • 如果给定路径/home/leguri/images/nsfw/lena-full.jpg和目录/home/leguri/images/nsfw/不存在,但目录/home/leguri/images/不存在,结果应该是/home/leguri/images/.

是否存在执行此操作的模块或功能,或者只是将路径分开/并测试存在?

ste*_*enl 5

我所知道的最接近的是Path :: Class,它不能完全按照您的意愿行事,但可以为您节省分割路径的几个步骤.

use Path::Class 'dir';

sub get_existing_dir {
    my ( $path ) = @_;

    my $dir = dir( $path );
    while (!-d $dir) {
        $dir = $dir->parent;
    }
    return $dir->stringify;
}

my $file = '/opt/var/DOES/NOT/EXIST/wtv/blarg.txt';
my $dir = get_existing_dir( $file );
print $dir;
Run Code Online (Sandbox Code Playgroud)