2016-02-28 40 views
4

FindBin模塊確定在使用該功能在編譯時的當前工作目錄(見源代碼here):如果getcwd()無法訪問,爲什麼會退回到cwd()?

sub cwd2 { 
    my $cwd = getcwd(); 
    # getcwd might fail if it hasn't access to the current directory. 
    # try harder. 
    defined $cwd or $cwd = cwd(); 
    $cwd; 
} 

其中cwd()getcwd()都從Cwd模塊導入。在這種情況下getcwd()失敗,但cwd()仍然工作? (我最感興趣的是Linux平臺,如果該事項)

參見:如果過程沒有按」

回答

4

正如評論說,getcwd()可能會失敗沒有足夠的權限訪問當前目錄(及其所有祖先)。即使在這種情況下,cwd()也有可能發送到可能設置的外部命令並獲取目錄。

更一般地,getcwd()被記錄爲行爲像POSIX getcwd調用。記錄爲cwd()更靈活。它們之間的差別在Linux上可能會很小,但CwdFindBin模塊都適用於Perl支持的所有平臺。其中包括Windows,VMS,pre-OSX MacOS,IBM z/OS和其他一系列的負載。在這些上,命令之間的差異可能很重要。

相關問題