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