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

为 MSWin32-x86-multi-thread (ActiveState Corp.) 构建的 Perl 版本 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'
4

2 回答 2

2

File::Spec->rel2abs在 AS Perl 5.16 上为我工作。如果可能的话,升级你的 Perl 版本可能是个好主意,因为 5.6 大约有 10 年的历史了。

作为替代尝试安装和使用Path::Class

use Path::Class;
print file($path)->absolute;
于 2013-04-22T09:06:43.720 回答
2

您也可以使用Cwd核心模块执行此操作:

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

(示例直接取自文档)。

但是,您绝对应该升级您的 Perl。Perl 5.6.1 实际上是在 12 年前发布的。从那时起,无论是在通用语言还是在 Windows 支持方面,都取得了巨大的进步。

于 2013-04-22T09:35:33.820 回答