2013-04-22 239 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 86多線程(的ActiveState公司)

使其更清晰,我想才達到類似下面的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;