如何连接路径名和相对路径名?

时间:2011-07-05 07:55:43

标签: perl concatenation

我有一个任务需要连接2个路径名:perl中的绝对+相对。以下描述了我想要实现的目标:

dir1/dir2/dir3/ + ../filename => dir1/dir2/filename
dir1/dir2/dir3/ + ../../filename => dir1/filename

我只有在相对路径中计算“..”的解决方案,比如X,然后将绝对路径分成dirs并计算它们 - Y并最终仅连接Y-X dirs和filename。这看起来太笨重,我想知道是否存在更好的解决方案(我确信它确实存在)。提前谢谢。

2 个答案:

答案 0 :(得分:4)

您可以查看File::Spec,即catdir方法:

use File::Spec;

print File::Spec->catdir('dir1/dir2/dir3', '../filename'),"\n";
print File::Spec->catdir('dir1/dir2/dir3', '../../filename', ),"\n";

答案 1 :(得分:1)

$ perl -MURI -E'say URI->new($ARGV[1])->abs($ARGV[0]);' \
    http://foo.com/dir1/dir2/dir3/ ../filename
http://foo.com/dir1/dir2/filename

$ perl -MURI -E'say URI->new($ARGV[1])->abs($ARGV[0]);' \
    http://foo.com/dir1/dir2/dir3/ ../../filename
http://foo.com/dir1/filename

它甚至可以与你拥有的两个相对URL一起使用。

$ perl -MURI -E'say URI->new($ARGV[1])->abs($ARGV[0]);' \
    /dir1/dir2/dir3/ ../filename
/dir1/dir2/filename

$ perl -MURI -E'say URI->new($ARGV[1])->abs($ARGV[0]);' \
    /dir1/dir2/dir3/ ../../filename
/dir1/filename