Что такое функция eval в perl и как ее использовать

При работе с функцией eval, можно использовать 2 варианта записи функции: eval BLOCK и eval EXPR. Каждый из вариантов имеет свои особенности в использовании.

 

eval BLOCK

Если задан eval BLOCK, функция выполняет перехват исключительных ситуаций, которые привели бы к возникновению фатальной ошибки и аварийному завершению программы.

eval BLOCK является альтернативой оператору «try» в Python, Java, и т.п.

Функция eval возвращает значение, полученное в результате последнего проведенного вычисления. Если во время выполнения eval возникает исключительная ситуация, то eval возвращает undef, и помещает в переменную $@ текст произошедшей ошибки. Если ошибка не возникла, значение переменной $@ будет равно пустой строке. Для возврата значений можно использовать в теле BLOCK функцию return.

Код, размещенный в BLOCK, проверяется и компилируется одновременно с компиляцией всей программы.

Стандартный пример использования eval BLOCK:

Форма eval BLOCK работает значительно быстрее, чем eval EXPR.

При равных условиях, использование формы eval BLOCK предпочтительнее, чем eval EXPR.

Пример использования eval BLOCK

С помощью eval BLOCK очень удобно проверять доступность тех или иных модулей:

Можно использовать eval BLOCK, если есть сомнения в возможности вызова подпрограмм:

или так:

 

eval EXPR

eval EXPR компилирует и выполняет код заданного выражения на этапе исполнения программы. Если во время выполнения eval EXPR возникает исключительная ситуация, функция возвращает undef, в переменную $@ передается текст произошедшей ошибки.

Если исключительная ситуация не возникла, eval возвращает результат последнего вычисления.

Использовать eval надо осторожно. Если функции eval передаются введенные пользователем данные — эти данные нужно тщательно проверять, во избежание запуска вредоносного кода и взлома системы.

Пример использования eval EXPR

eval EXPR можно использовать, если заранее не известно, какие команды и подпрограммы потребуется выполнить.

 

Полезная ссылка

koorchik.blogspot.com: Чем плох eval?!