6

我只能想象我没有正确搜索;这似乎是一个显而易见的问题。如果这是重复的,我很抱歉。

我正在编写一个将文件名作为命令行参数的 Perl 程序。我需要将文件名(或附加了相对路径的文件名)转换为绝对路径(特别是与 Win32::OLE 一起使用)。

我尝试使用Cwd的“abs_path”,这几乎可以满足我的要求,但它使用 Unix 风格的路径而不是 Win32 路径返回它。

是否有可以转换路径的模块,或者可能是首先使用的更好的模块?

4

4 回答 4

13

我使用rel2absFile ::Spec。但是你必须小心:这可能会调用getdcwdfrom Cwd,它会假设你想要当前驱动器的当前工作目录。如果文件在其他驱动器上,您必须自己修复它或提供第二个参数来设置基本路径。

于 2009-10-06T20:01:23.260 回答
4
use File::Spec::Functions qw(rel2abs);
print rel2abs($ARGV[0]), "\n";
于 2009-10-06T19:59:49.453 回答
-1
my($foo) = abs_path($some_file);
$foo =~ s{/}{\\}g;

print "FOO: $foo\n";
于 2009-10-06T20:00:17.347 回答
-1

我使用 Cwd 的 abs_path,然后在我真正需要完成时使用正则表达式转换斜杠。但我发现,对于大多数用途,Unix 风格的斜线工作得很好。这只是为了偶尔“将文件名传递给那个烦人的受限程序”,我最终需要转换斜杠。

use Cwd 'abs_path';
my $path = abs_path($rel_path);

# and only if necessary...
$path =~ s'[/\\]+'\\'g;  # use Windows-style slashes
$path =~ s'^\\'\\\\';    # handle network path

但是然后..我使用了很多网络路径,有或没有映射驱动器参考。你的旅费可能会改变。

于 2009-10-06T20:40:14.197 回答