什么的Perl模块(S)我用它来从Windows上的相对一个获得绝对路径(包括文件名)?
-
20-09-2019 - |
题
我只能想象我不能正确搜索;这似乎是在这里问了一个很明显的问题。我的道歉,如果这是一个重复。
我正在写一个Perl程序,将采取的文件名作为命令行参数。我需要的文件名(或具有附加的相对路径的文件名)转换为绝对路径(具体地涉及具有的Win32 :: OLE工作)。
我尝试使用 CWD 的‘绝对路径’,而且几乎我想要做什么,但它使用UNIX风格的路径,而不是一个Win32一个其返回。
有没有将转换的路径,或者更好的模块首先使用一个模块?
解决方案
我使用来自文件::规格 rel2abs
。你必须要小心,虽然:可能叫getdcwd
从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的绝对路径,然后使用正则表达式来斜线转换时,我的真正的需要完成它。但我发现,对于大多数应用中,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
但后来..我使用了大量的网络路径,具有或不具有映射的驱动器的参考。大小可能不同。
不隶属于 StackOverflow