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.
Эквиваленты "сделать или умереть" устанавливаются простым вызовом метода import Fatal, передавая ему имена функций, которые нужно заменить. Вы можете обернуть как пользовательские функции, так и переопределяемые операторы CORE (кроме exec, system, print, или любых других встроенных функций, которые не могут быть выражены через прототипы) таким способом.
Если символ :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 не рекомендуется, так как это может привести к тому, что исключения не будут сгенерированы, если вы случайно вызовете метод без контекста без значения. Используйте 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). Сильно рекомендуется использовать скалярные файловые дескрипторы вместо этого.
АВТОР
Оригинальный модуль написан Lionelem Cons (CERN).
Обновление прототипа Ильей Захаревичем <ilya@math.ohio-state.edu>.
Поддержка autodie, исправление ошибок, расширенная диагностика, system поддержка и существенная переработка Полом Фенвиком <pjf@perltraining.com.au>.
ЛИЦЕНЗИЯ
Этот модуль является свободным программным обеспечением, его можно распространять на тех же условиях, что и Perl сам по себе.
СМОТРИТЕ ТАКЖЕ
autodie для более удобного способа использования лексического Fatal.
IPC::System::Simple для аналогичной идеи вызовов system() и обратных кавычек.
© 1993–2023 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.38.0/Fatal