## EVAL Evaluate a String

Section: FreeMat Functions

### Usage

The `eval` function evaluates a string. The general syntax for its use is

       eval(s)

where `s` is the string to evaluate. If `s` is an expression (instead of a set of statements), you can assign the output of the `eval` call to one or more variables, via

       x = eval(s)
       [x,y,z] = eval(s)

Another form of `eval` allows you to specify an expression or set of statements to execute if an error occurs. In this form, the syntax for `eval` is

       eval(try_clause,catch_clause),

or with return values,

       x = eval(try_clause,catch_clause)
       [x,y,z] = eval(try_clause,catch_clause)

These later forms are useful for specifying defaults. Note that both the `try_clause` and `catch_clause` must be expressions, as the equivalent code is

      try
        [x,y,z] = try_clause
      catch
        [x,y,z] = catch_clause
      end

so that the assignment must make sense in both cases.

### Example

Here are some examples of `eval` being used.

    --> eval('a = 32')

    a =

     32

    --> b = eval('a')

    b =

     32

The primary use of the `eval` statement is to enable construction of expressions at run time.

    --> s = ['b = a' ' + 2']

    s =

     b = a + 2

    --> eval(s)

    b =

     34

Here we demonstrate the use of the catch-clause to provide a default value

    --> a = 32

    a =

     32

    --> b = eval('a','1')

    b =

     32

    --> b = eval('z','a+1')
    In base(base) on line 0
    In simkeys(built in) on line 0
    In Eval(b = eval('z','a+1')) on line 1
    In eval(built in) on line 0
    In Eval(t___0 = z;) on line 1

    b =

     33

Note that in the second case, `b` takes the value of 33, indicating that the evaluation of the first expression failed (because `z` is not defined).