我有一个任务需要连接2个路径名:perl中的绝对+相对。以下描述了我想要实现的目标:
dir1/dir2/dir3/ + ../filename => dir1/dir2/filename
dir1/dir2/dir3/ + ../../filename => dir1/filename
我只有在相对路径中计算“..”的解决方案,比如X,然后将绝对路径分成dirs并计算它们 - Y并最终仅连接Y-X dirs和filename。这看起来太笨重,我想知道是否存在更好的解决方案(我确信它确实存在)。提前谢谢。
答案 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