У меня проблема, я не могу понять, и надеюсь, что вы, ребята, можете мне помочь.Проблема возникает, когда:
- Я использую пользовательскую обработку ошибок
- Я использую 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
Теперь, если я удалю свою собственную обработку ошибок ИЛИ, если я использую мод вместо требует матрица не будет отображаться.
Интересно видеть, что действительно действительно выдает результат (test.txt составляет 4 байта), что означает stat работает как надо.
Итак, почему я получаю эту ошибку?Это действительно ошибка?Обрабатывает ли по умолчанию обработка ошибок perl ошибки "1"?
EDIT Как заметил Линус Клин, причина, по которой я получаю «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
Но, тем не менее, я получаю сообщение об ошибке, которое без пользовательской обработки ошибок я не получаю.