私は理解できないような問題を抱えています。皆さんが私を助けてくれることを願っています。
問題は次の場合に発生します:
- カスタムエラー処理を使用します
- 別のモジュールでFile::Statを使用します
例:
メインファイル
use strict;
use warnings;
# signal handling
$SIG{__DIE__} = sub {
my $error = @_;
chomp $error;
print "die: $error\n";
};
require mod;
mod->get_stat();
モジュール
package mod;
use strict;
use warnings;
use File::stat;
sub get_stat {
my $file_path = "test.txt";
my $file_size = stat($file_path)->size;
print $file_size;
}
1;
これにより、次の出力が発生します。
die: 1
die: 1
die: 1
die: 1
die: 1
4
これで、カスタムエラー処理を削除した場合、またはrequireの代わりにmodを使用した場合、ダイは表示されません。
興味深いのは、実際に結果が生成されることです(test.txtは4バイトです)。つまり、statは正常に機能しています。
では、なぜこのエラーが発生するのですか?これは本当にエラーですか?デフォルトのperlエラー処理は「1」のエラーを無視しますか?
編集
LinusKleenが述べたように、私が「1」を取得する理由は、配列内の要素の量を表示しているためです。
代わりにエラーの内容を印刷すると、次のエラーが発生します。
die: Your vendor has not defined Fcntl macro S_ISVTX, used at c:/Perl64/lib/File/stat.pm line 37.
die: Your vendor has not defined Fcntl macro S_IFSOCK, used at c:/Perl64/lib/File/stat.pm line 41.
die: Your vendor has not defined Fcntl macro S_IFBLK, used at c:/Perl64/lib/File/stat.pm line 41.
die: S_IFFIFO is not a valid Fcntl macro at c:/Perl64/lib/File/stat.pm line 41.
die: Your vendor has not defined Fcntl macro S_IFLNK, used at c:/Perl64/lib/File/stat.pm line 41.
4
しかし、それでも、カスタムエラー処理なしでは取得できないエラーが発生します。