考慮下面的代碼:在Windows上使用Perl,如何確保在chdir後的正確情況下獲得路徑?
print cwd . "\n";
$str= "../source"; # note the lower case 's'
chdir($str);
print cwd . "\n";
如果我的當前目錄是c:\parentdir\Source
(注意是大寫的「S」),這樣做的結果應該是:
c:/parentdir/Source c:/parentdir/source
這導致的子程序問題我關心文件夾名稱的正確大小寫。 $ str被傳遞給我的子程序,所以我不能提前知道它是否有正確的大小寫。如何確定匹配$str
的路徑的正確名稱?
這裏更多的細節:
- 我意識到
../source
是一個病態的例子,但是它起到 說明問題。即使$str
正在請求除當前文件夾之外的 文件夾,它也會發生。 - 我已經試過各種選項,包括
rel2abs
,在$str
一個水珠搜索,和其他人,但他們都似乎回到「source
」,而不是 「Source
」。 - 我可以搜索
$str/..
所有目錄,它們全部轉換爲 絕對路徑,並比較他們的$str
, 絕對路徑版本,但是這似乎是一個黑客。我希望有更優雅的東西。
這不是不正確。通常Windows文件系統是不區分大小寫的,除非NTFS被另外配置。 – m0skit0
絕對如此。不幸的是,我的子程序需要正確的情況,而不是簡單地操縱文件系統。所以,雖然Windows和Perl不關心,但我不得不。 – Craig
不區分大小寫,是的,但它也是* case-preserving *。如果一個文件被創建爲'Foo',它可以使用'foo'來訪問,但系統知道它的名字是'Foo'。 – ikegami