为什么这个回报失败?

/tmp当然存在,但是当存在一个目录时, mkdir -p不应该返回一个错误。

那么为什么以下失败?

 system("/usr/bin/mkdir -p /tmp 2> /dev/null") == 0 or print("Failed"); if ($?) {print("Failed");} system("/usr/bin/mkdir -p /tmp 2> /dev/null"); if ($?) {print("Failed");} 

从Bash我得到预期的0

 # mkdir -p /tmp # echo $? 0 

/bin/mkdir不是/usr/bin/mkdir 。 我知道这不仅仅是因为你说/usr/bin/mkdir失败了,不仅仅是因为我看着我的(Mac OS X)系统,还因为这样的低级的基本程序经常在/bin因为它们被要求启动系统等

顺便说一句,你不应该使用system(mkdir)从Perl制作目录。 我相信有很多方法可以更“原生”地执行,并且具有更好的错误检查功能。