Как объединить путь и относительный путь? - PullRequest
1 голос
/ 05 июля 2011

У меня есть задача, где мне нужно объединить 2 пути: абсолютный + относительный в perl.Ниже описано, чего я пытаюсь достичь:

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

У меня есть только решение, которое считает «..» в относительном пути, скажем X, затем разбивает абсолютный путь на dirs и считает их - Y и, наконец,объединяет только каталоги YX с именем файла.Это кажется слишком громоздким, и мне интересно, существует ли лучшее решение (я уверен, что оно существует).Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 05 июля 2011

Вы можете посмотреть на Файл :: Spec , а именно catdir Метод:

use File::Spec;

print File::Spec->catdir('dir1/dir2/dir3', '../filename'),"\n";
print File::Spec->catdir('dir1/dir2/dir3', '../../filename', ),"\n";
1 голос
/ 05 июля 2011
$ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...