确定相对路径的绝对路径
问题描述:
我想将相对路径转换为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'
答
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支持方面取得了巨大进步。
答
File::Spec->rel2abs
适用于AS Perl 5.16。如果可能的话,升级你的Perl版本可能是一个想法,因为5.6大概有10年了。
作为替代尝试安装和使用Path::Class
:
use Path::Class;
print file($path)->absolute;