Fatal
СОДЕРЖАНИЕ
ИМЯ
Fatal - Замена функций эквивалентами, которые либо выполняют задачу, либо завершаются с ошибкой
СИНТАКСИС
use Fatal qw(open close);
open(my $fh, "<", $filename); # No need to check errors!
use File::Copy qw(move);
use Fatal qw(move);
move($file1, $file2); # No need to check errors!
sub juggle { . . . }
Fatal->import('juggle'); ЛУЧШАЯ ПРАКТИКА
Fatal устарел, его заменил новый pragma autodie. Используйте autodie вместо Fatal. autodie поддерживает лексическое область действия, генерирует реальные объекты исключений и предоставляет более удобные сообщения об ошибках.
Использование :void с Fatal не рекомендуется.
ОПИСАНИЕ
Fatal предоставляет способ удобной замены функций, которые обычно возвращают ложное значение при ошибке, эквивалентами, которые генерируют исключения, если они не успешны. Это позволяет вам использовать эти функции, не проверяя явно их возвращаемые значения при каждом вызове. Исключения можно перехватывать с помощью eval{}. Подробнее см. perlfunc и perlvar.
Эквиваленты «выполнить или умереть» создаются простым вызовом функции import Fatal, передав ей имена заменяемых функций. Вы можете обернуть как пользовательские функции, так и переопределяемые операторы CORE (кроме exec, system, print, или любого другого встроенного, который нельзя выразить через прототипы) таким образом.
Если символ :void появляется в списке импорта, то функции, перечисленные позже в этом списке, генерируют исключение только тогда, когда они вызываются в контексте void — то есть, когда их возвращаемые значения игнорируются. Например
use Fatal qw/:void open close/;
# properly checked, so no exception raised on error
if (not open(my $fh, '<', '/bogotic') {
warn "Can't open /bogotic: $!";
}
# not checked, so error raises an exception
close FH; Использование :void не рекомендуется, так как это может привести к тому, что исключения не будут генерироваться, если вы случайно вызовете метод без контекста void. Используйте autodie вместо этого, если вам нужно отключить поведение autodying/Fatal для небольшого блока кода.
ДИАГНОСТИКА
- Неправильное имя подпрограммы для Fatal: %s
-
Вы вызвали
Fatalс аргументом, который не похож на имя подпрограммы или на поддерживаемый этим вариантом Fatal переключатель. - %s не является подпрограммой Perl
-
Вы попросили
Fatalпопробовать заменить подпрограмму, которой не существует или которая ещё не определена. - %s — это не встроенная функция, и не подпрограмма Perl
-
Вы попросили
Fatalзаменить подпрограмму, но это не встроенная функция Perl, иFatalне смогла найти её в качестве обычной подпрограммы. Возможно, она не существует или ещё не определена. - Невозможно сделать непереопределяемую %s fatal
-
Вы попытались использовать
Fatalна встроенной функции Perl, которую нельзя переопределить, например,printилиsystem, что означает, чтоFatalне может вам помочь, хотя некоторые другие модули могут. См. раздел "СМОТРИ ТАКЖЕ" данной документации. - Внутренняя ошибка: %s
-
Вы обнаружили ошибку в
Fatal. Пожалуйста, сообщите об этом, используя командуperlbug.
ОШИБКИ
Fatal переопределяет контекст, в котором вызывается функция, и всегда делает его скалярным контекстом, за исключением случаев использования тега :void. Эта проблема не существует в autodie.
Предупреждения «Используется только один раз» могут генерироваться, когда autodie или Fatal используются с файловыми дескрипторами пакета (например, FILE). Сильно рекомендуется использовать скалярные файловые дескрипторы вместо этого.
АВТОР
Оригинальный модуль от Лионеля Конса (CERN).
Обновления прототипа Ильёй Захаревичем <ilya@math.ohio-state.edu>.
Поддержка autodie, исправления ошибок, расширенная диагностика, system поддержка и большая переработка Полом Фенвиком <pjf@perltraining.com.au>
ЛИЦЕНЗИЯ
Этот модуль — свободное программное обеспечение, его можно распространять на тех же условиях, что и Perl сам по себе.
СМОТРИ ТАКЖЕ
autodie для более удобного способа использования лексического Fatal.
IPC::System::Simple для аналогичной идеи для вызовов system() и обрамленных обрамлениями команд.
© 1993–2021 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.34.0/Fatal