我只能想象我没有正确搜索;这似乎是一个显而易见的问题。如果这是重复的,我很抱歉。
我正在编写一个将文件名作为命令行参数的 Perl 程序。我需要将文件名(或附加了相对路径的文件名)转换为绝对路径(特别是与 Win32::OLE 一起使用)。
我尝试使用Cwd的“abs_path”,这几乎可以满足我的要求,但它使用 Unix 风格的路径而不是 Win32 路径返回它。
是否有可以转换路径的模块,或者可能是首先使用的更好的模块?
我使用rel2abs
File ::Spec。但是你必须小心:这可能会调用getdcwd
from Cwd
,它会假设你想要当前驱动器的当前工作目录。如果文件在其他驱动器上,您必须自己修复它或提供第二个参数来设置基本路径。
use File::Spec::Functions qw(rel2abs);
print rel2abs($ARGV[0]), "\n";
my($foo) = abs_path($some_file);
$foo =~ s{/}{\\}g;
print "FOO: $foo\n";
我使用 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
但是然后..我使用了很多网络路径,有或没有映射驱动器参考。你的旅费可能会改变。