Сообщение от
YaLTeR
скажите плиз а что делает eval()?
Пиво пьет
А вообще, эта функция заносит сообщение об ошибке в переменную $@ и завершает eval с неопределенным значением. Это позволяет использовать ее для генерации исключений. Пример:
PHP код:
$a = 1; $b = 0;
eval { die "Zero divide" if $b == 0; $answer = $a / $b; };
die if $@;
Этот сценарий завершится с сообщением:
Zero divide at test.pl line2.
...propagated at test.pl line3.
Если произошла ошибка компиляции или была вызвана функция die(), то eval возвращает неопределенное значение, а в переменную $@ заносится сообщение об ошибке. Если ошибок не возникло, то в $@ заносится пустая строка.
Пример использования eval для обработки исключения:
PHP код:
$a = 1; $b = 0;
eval { $answer = $a / $b };
warn $@ if $@;
Примеры использования eval для динамического вычисления выражений:
PHP код:
eval $x; # 1
eval "$x"; # 2
eval '$x'; # 3
eval { $x }; # 4
Выражения 1 и 2 компилируют PERL-программу, содержащуюся в переменной $x и выполняют ее. Выражения 3 и 4 просто возвращают значение переменной $x.