我試圖獲取作爲Cygwin中的Windows路徑提供的文件的絕對路徑,分別是Msys(Git Bash)perl。我希望當提供的路徑是「本機」Cygwin/MSys路徑時也可以使用這些解決方案。Cwd :: abs_path破壞msys,cygwin
我試過使用Cwd :: abs_path,但似乎微妙地破碎了。下面是測試:
[email protected] MINGW64 /f/Temp
$ perl
use Cwd;
print Cwd::abs_path("F:\\") . "\n";
print Cwd::abs_path("F:\\test.txt") . "\n";
print Cwd::abs_path("..\\test.txt") . "\n";
/f
/f/Temp/F:/test.txt
/f/Temp/../test.txt
目錄的工作,相對路徑的「工作」,但不給我期望的結果(即..不消除),但是當我添加一個文件名的絕對路徑結果是錯誤的。我曾希望Cwd能爲我做路徑翻譯。
我需要稍後提取部分路徑(使用File :: Spec中的函數),並且還需要打開該文件。要繼續使用提取的部分,路徑應該是所使用的perl版本的本地路徑。我想避免使用cygpath,因爲我希望腳本也可以使用ActivePerl,它只理解Windows路徑。我當然可以添加一些ifs來爲unix-y perls調用cygpath。
MSys確實有一些規定使得使用Windows路徑更容易。例如'perl F:\\ Temp \\ test.pl'工作得很好,即使它是一個Windows路徑。我希望MSys perl的圖書館也會有所幫助。 Cwd :: abs_path也會觸及文件系統,因此它可能會發現它返回的內容不是有效路徑,而是產生錯誤而不是無效路徑,正如通常用於不存在的路徑一樣。 – adrianN