2

我有以下 perl 代码尝试将字符串写入新创建的文件:

open(OUT, ">$file") or die "file out error!\n";
print OUT $string;

通常,此代码可以正常工作。如果我们对 $file 所在的目录没有写权限,程序就会失败,这是意料之中的。但是,不是打印“文件输出错误!” 作为错误消息,程序只是以退出代码 13(权限被拒绝)退出。

  1. 当我们无法写入文件时,为什么 open 方法会成功?
  2. 在这种情况下,我们如何获得适当的错误消息?
4

1 回答 1

3

我认为您混淆了程序退出代码及其标准系统系统错误代码的报告。错误代码 ( errno) 13 等同于“权限被拒绝”。

perl -lE '$!=13;say $!'
Permission denied

perl -lE '$!=32;say $!'
Broken pipe

当然,实际消息可能会因您的操作系统而略有不同。

就此而言,为打开构建错误消息的更好(IMO)方法是:`open OUT,">","$file" 或 die "Can't open $file: $!\n" .

于 2012-06-27T21:12:12.870 回答