什么的Perl模块(S)我用它来从Windows上的相对一个获得绝对路径(包括文件名)?

StackOverflow https://stackoverflow.com/questions/1527638

我只能想象我不能正确搜索;这似乎是在这里问了一个很明显的问题。我的道歉,如果这是一个重复。

我正在写一个Perl程序,将采取的文件名作为命令行参数。我需要的文件名(或具有附加的相对路径的文件名)转换为绝对路径(具体地涉及具有的Win32 :: OLE工作)。

我尝试使用 CWD 的‘绝对路径’,而且几乎我想要做什么,但它使用UNIX风格的路径,而不是一个Win32一个其返回。

有没有将转换的路径,或者更好的模块首先使用一个模块?

有帮助吗?

解决方案

我使用来自文件::规格 rel2abs。你必须要小心,虽然:可能叫getdcwdCwd,它会认为你要为当前驱动器的当前工作目录。如果该文件是一些其他的驱动器上,你就必须解决这个问题了自己或提供的第二个参数设置的基本路径。

其他提示

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的绝对路径,然后使用正则表达式来斜线转换时,我的真正的需要完成它。但我发现,对于大多数应用中,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

但后来..我使用了大量的网络路径,具有或不具有映射的驱动器的参考。大小可能不同。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top