Я пытаюсь понять следующий фрагмент кода:
sub foo { ... if ( $@ ) { ... die $@; } }
perldoc -f eval * * 1004
perldoc -f eval
Если есть синтаксическая ошибка или время выполнения ошибка, или утверждение "умереть" выполнено, неопределенное значение возвращается "eval", и $ @ устанавливается в сообщение об ошибке. Если бы не было ошибка, $ @ гарантированно будет нулевым строка.
См. Также perldoc perlvar.
perldoc perlvar
$@ - магическая переменная, содержащая сообщение об ошибке последней команды eval, если есть.
$@
eval
Циклу if должен предшествовать eval, чтобы он мог перехватывать $ @.
Во время eval () $ @ всегда устанавливается при сбое и очищается при успехе.
В случае, если код внутри eval () не скомпилирован, $ @ устанавливается на ошибку компиляции.