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). Сильно рекомендуется использовать скалярные файловые дескрипторы вместо этого.
АВТОР
Оригинальный модуль от Lionel Cons (CERN).
Обновления прототипов Илья Захаревич <ilya@math.ohio-state.edu>.
autodie поддержка, исправления ошибок, расширенная диагностика, system поддержка и большая переработка от Paul Fenwick <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.32.0/Fatal