eval without warnings





I'd like to evaluate user input only where it makes sense, e.g.

"2*(3+2)" ==> 10
"2*dog" ==> "2*dog"
"mysquarefunction(2)" ==> 4
"3*mysquarefunction(2)" ==> 12
"some guy" ==> "some guy"

I've tried:

if ($val =~ m|[0-9]|) { $val = eval $val; }

and

{
no warnings;
eval { $val2 = eval $val };
if (!$@) { $val2 = $val; }
}

.... but neither work on all of the examples above.

I'd really rather try the eval, and if it bonks, just use what they entered.
But I can't figure out how to keep perl from dumping a warning to STDOUT
when it bonks.

Is this possible?

- Bryan


.



Relevant Pages