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 устарел в пользу нового модуля autodie. Пожалуйста, используйте autodie вместо Fatal. autodie поддерживает лексическое пространство имён, бросает реальные объекты исключений и предоставляет более удобные сообщения об ошибках.
Использование :void с Fatal не рекомендуется.
ОПИСАНИЕ
Fatal предоставляет способ удобной замены функций, которые обычно возвращают ложное значение при ошибке, на эквиваленты, которые выбрасывают исключения, если не увенчались успехом. Это позволяет использовать эти функции, не проверяя их возвращаемые значения явно при каждом вызове. Исключения могут быть перехвачены с помощью eval{}. Подробнее см. perlfunc и perlvar.
Эквиваленты do-or-die создаются просто путем вызова процедуры 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() и backticks.
© 1993–2020 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.28.3/Fatal