FindBin
模块使用此函数在编译时确定当前工作目录(请参阅源代码here):
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平台)
另见:
答案 0 :(得分:4)
正如评论所说,如果进程对当前目录(及其所有祖先)没有足够的访问权限,cwd()
可能会失败。 pwd
有可能发出可能的setuid外部getcwd()
命令并在这种情况下获取目录。
更一般地说,getcwd
的行为与POSIX cwd()
调用类似。 Cwd
被记录为更灵活。它们之间的差异在Linux上可能非常小,但FindBin
和{{1}}模块都适用于Perl支持的所有平台。其中包括Windows,VMS,OSX前MacOS,IBM z / OS以及其他一些产品。在那些,命令之间的差异可能很大。