Using Eval for Expression Evaluation
There are a number of tasks, such as parsing and expression evaluation, in which you can make Perl do all the dirty work. Assuming, of course, that your parsing requirements are similar to Perl’s own. Perl, after all, knows a thing or two about parsing and evaluating Perlish statements!
Let’s assume that your input data is a bunch of quoted strings and you would like to verify that the quotes are balanced:
'He said, "come on over"' 'There are times when "Peter" doesn\'t work at all'
Instead of fretting over backslash escapes and writing code to check
whether the quotes are correctly paired (balanced), you can simply
eval the strings, as shown in Example 5.1. Remember that a string is a correct Perl
expression too. If Perl puts an error in $@, you
can be sure you have faulty input.
Example 5-1. eval.pl
while (defined($s = <>)) { # Read a line into $s
$result = eval $s; # Evaluate that line
if ($@) { # Check for compile or run-time errors.
print "Invalid string:\n $s";
} else {
print $result, "\n";
}
}
The neat thing about this code is that
it works equally well as a fancy calculator, because
$s can be any valid Perl
statement, with arithmetic operators, loops, variable assignments,
subroutines, and so on. Here’s how you might use the program:
% perl eval.pl 2 * log (10); 4.60517018598809 $a = 10; $a += $a ** 2; 110 for (1..10) {print $_ , " " } 1 2 3 4 5 6 7 8 9 10
For each line you enter, Perl computes and prints out the result (shown in non-bold ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access