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

もちろん、実際のメッセージは OS によって若干異なる場合があります。

さらに言えば、開くためのエラーメッセージを作成するより良い (IMO) 方法は、次のようなものです: `open OUT,">","$file" or die "Can't open $file: $!\n" .

于 2012-06-27T21:12:12.870 に答える