确定相对路径的绝对路径

时间:2013-04-22 08:49:33

标签: python perl

我想在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

为MSWin32-x86-multi-thread(ActiveState Corp。)构建的Perl Version v5.6.1

为了更清楚,我想获得类似于以下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 个答案:

答案 0 :(得分:2)

File::Spec->rel2abs适用于AS Perl 5.16。如果可能的话,升级你的Perl版本可能是个主意,因为5.6大约有10年了。

作为替代方案,请尝试安装并使用Path::Class

use Path::Class;
print file($path)->absolute;

答案 1 :(得分: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支持方面都取得了很大的进步。