簡體   English   中英

我要使用哪些Perl模塊從Windows上的相對路徑獲取絕對路徑(包括文件名)?

[英]What Perl module(s) do I use to obtain an absolute path (including filename) from a relative one on Windows?

我只能想象我搜索不正確; 這似乎是一個顯而易見的問題。 如果這是重復的話,我深表歉意。

我正在編寫一個Perl程序,它將文件名作為命令行參數。 我需要將文件名(或帶有相對路徑的文件名)轉換為絕對路徑(特別是與Win32 :: OLE一起使用)。

我嘗試使用Cwd的'abs_path',幾乎可以實現我想要的功能,但是它使用Unix風格的路徑而不是Win32路徑返回它。

是否有將轉換路徑的模塊,或者也許是首先使用的更好的模塊?

我使用File :: Spec中的 rel2abs 但是,您必須要小心:這可能會從Cwd調用getdcwd ,並且將假定您需要當前驅動器的當前工作目錄。 如果文件在其他驅動器上,則必須自己進行修復或提供第二個參數來設置基本路徑。

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

但是,然后..我使用了很多網絡路徑,無論有沒有映射的驅動器參考。 你的旅費可能會改變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM