Какие модули Perl я использую для получения абсолютного пути (включая имя файла) из относительного пути в Windows?

StackOverflow https://stackoverflow.com/questions/1527638

Вопрос

Я могу только предположить, что я неправильно ищу;это кажется очевидным вопросом, который следует задать здесь.Приношу свои извинения, если это дубликат.

Я пишу программу на Perl, которая будет принимать имя файла в качестве аргумента командной строки.Мне нужно преобразовать имя файла (или имя файла с привязанным относительным путем) в абсолютный путь (специально для работы с Win32::OLE).

Я пробовал использовать Ухо's 'abs_path' , и это почти делает то, что я хочу, но возвращает его, используя путь в стиле Unix вместо пути Win32.

Есть ли модуль, который преобразует путь, или, возможно, лучший модуль для использования в первую очередь?

Это было полезно?

Решение

Я использую rel2abs От Файл::Спецификация.Но ты должен быть осторожен:это могло бы вызвать getdcwd От Cwd, и это будет предполагать, что вам нужен текущий рабочий каталог для текущего диска.Если файл находится на каком-либо другом диске, вам придется исправить это самостоятельно или указать второй аргумент для задания базового пути.

Другие советы

use File::Spec::Functions qw(rel2abs);
print rel2abs($ARGV[0]), "\n";
my($foo) = abs_path($some_file);
$foo =~ s{/}{\\}g;

print "FOO: $foo\n";

Я использую abs_path Cwd, а затем использую регулярное выражение для преобразования косых черт, когда я действительно нужно это сделать.Но я обнаружил, что для большинства применений косые черты в стиле Unix работают просто отлично.Только для случайного "передачи имени файла в эту раздражающе ограниченную программу" мне в конечном итоге приходится преобразовывать косые черты.

use Cwd 'abs_path';
my $path = abs_path($rel_path);

# and only if necessary...
$path =~ s'[/\\]+'\\'g;  # use Windows-style slashes
$path =~ s'^\\'\\\\';    # handle network path

Но потом..Я использую множество сетевых путей, с привязкой к подключенному диску или без нее.Ваш пробег может отличаться.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top