Cli*_*ton 0 perl path absolute-path
是否有一个函数说f(在基本Perl或库中),这样:
f("/a/b/c", "./d") == "/a/b/c/d"
f("/a/b/c", "../d") == "/a/b/d"
f("/a/b/c", "/d") == "/d"
Run Code Online (Sandbox Code Playgroud)
基本上,它返回重复生成的目录cd.
Core的File :: Spec有这样的函数(rel2abs),但我更喜欢Path :: Class(因为它太容易错误地使用File :: Spec).
use Path::Class qw( dir );
say dir('./d')->absolute('/a/b/c'); # /a/b/c/d
say dir('../d')->absolute('/a/b/c'); # /a/b/d
say dir('/d')->absolute('/a/b/c'); # /d
Run Code Online (Sandbox Code Playgroud)
如果您要创建文件路径,请使用file而不是dir.
顺便说一下,./d这只是一种冗长的写作方式d.
哎呀,在UNIX系统上,返回/a/b/c/../d的中间的一个,因为它是不可能知道/a/b/c/../d意味着/a/b/d不检查文件系统.(它实际上可能是/a/b/e/f/d.)在我的脑海中,我不知道通过使用pwd以外的基础检查文件系统来创建绝对路径的任何工具.