2013-04-22 4 views
3

Я хотел бы преобразовать относительный путь в абсолютный путь в perl-скрипте. Мое понимание было, File::Spec->rel2abs сможет справиться с этим изящно, но в следующем сценарии, я не получаю ожидаемый результатОпределить абсолютный путь от относительного пути

c:\Temp>cat test.pl 
use File::Spec; 
print File::Spec->rel2abs($ENV{'VS100COMNTOOLS'} . '../../VC/bin/vsvars32.bat'); 

c:\Temp>perl test.pl 
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\..\..\VC\bin\vsvars32.bat 

я что-то подобное ожидает

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vsvars32.bat 

Perl версии v5. 6,1 построен для MSWin32-x86-многопоточной (ActiveState Corp.)

чтобы было понятнее, я хотел бы для того чтобы достигнуть что-то похожее на следующий код Python

>>> os.path.abspath(os.path.join(os.environ['VS110COMNTOOLS'], r'..\..\VC\bin\vsvars32.bat')) 
'C:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\VC\\bin\\vsvars32.bat' 

ответ

2

You can also do this with the Cwd core module:

use Cwd 'abs_path'; 
my $abs_path = abs_path($file); 

(пример взят непосредственно из документации).

Однако вы должны обязательно обновить свой Perl. Perl 5.6.1 был фактически выпущен более 12 лет назад. С тех пор были большие успехи, как на общем языке, так и в поддержке Windows.

2

File::Spec->rel2abs работает для меня на AS Perl 5.16. Возможно, вам стоит обновить версию Perl, если это возможно, так как 5.6 составляет около 10 лет.

В качестве альтернативного попытаться установить и с помощью Path::Class:

use Path::Class; 
print file($path)->absolute; 
Смежные вопросы