eval string eval { block }
Evaluates the expression or code in its argument at runtime as a separate Perl program within the context of the larger script. Any variable settings remain afterward, as do any subroutine or format definitions. The code of the
eval
is treated as a block, so any locally scoped variables declared within the
eval
last only until the
eval
is done. (See also
local
and
my
.) The value returned from an
eval
is the value of the last expression evaluated. Like subroutines, you may also use the
return
function to return a value and exit the
eval
.
With
eval
string
, the contents of
string
are compiled and executed at runtime. For example:
The string form of$a = 3, $b = 4; $c = '$a * $b'; print (eval "$c"); # prints 12
eval
is useful for executing strings produced at runtime from standard or other dynamic input sources. If the string produces an error, either from syntax or at runtime, the
eval
exits with the undefined value and places the error in
$@
. If
string
is omitted, the operator evaluates
$_
.
The block form of
eval
is used in Perl programs to handle runtime errors (exceptions). The code in
block
is compiled only once during the compilation of the main program. If there is a syntax error in the block it will produce an error at compile time. If the code in
block
produces a runtime error (or if a
die
statement is encountered), the
eval
exits, and the error is placed in
$@
. For example, the following code can be used to trap a divide-by-zero error at runtime:
As with any code in a block, a final semicolon is not required.eval { $a = 10; $b = 0; $c = $a / $b; # causes runtime error # trapped by eval }; print $@; # Prints "Illegal division by 0 at try.pl line 3"
Copyright © 2001 O'Reilly & Associates. All rights reserved.