## 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')

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).