
>>-INTERPRET--expression;--------------------------------------><
INTERPRET processes instructions that have been
built dynamically by evaluating expression.
The expression is
evaluated and is then processed (interpreted) just as though the resulting
string were a line inserted into the program (and bracketed by a DO;
and an END;).
Any instructions (including INTERPRET instructions)
are allowed, but note that constructions such as DO…END and SELECT…END
must be complete. For example, a string of instructions being interpreted
cannot contain a LEAVE or ITERATE instruction (valid only within a
repetitive DO loop) unless it also contains the whole repetitive DO…END
construct.
A semicolon is implied at the end of the expression
during execution, if one was not supplied.
Example: data='FRED'
interpret data '= 4'
/* Builds the string "FRED = 4" and */
/* Processes: FRED = 4; */
/* Thus the variable FRED is set to "4" */
Example: data='do 3; say "Hello there!"; end'
interpret data /* Displays: */
/* Hello there! */
/* Hello there! */
/* Hello there! */
Note: - Label clauses are not permitted in an interpreted
character string.
- If you are new to the concept of the INTERPRET instruction and
are getting results that you do not understand, you may find that
executing it with TRACE R or TRACE I in
effect is helpful.
Example: /* Here is a small REXX program. */
Trace Int
name='Kitty'
indirect='name'
interpret 'say "Hello"' indirect'"!"'
When this
is run, it gives the trace:
kitty
3 *-* name='Kitty'
>L> "Kitty"
4 *-* indirect='name'
>L> "name"
5 *-* interpret 'say "Hello"' indirect'"!"'
>L> "say "Hello""
>V> "name"
>O> "say "Hello" name"
>L> ""!""
>O> "say "Hello" name"!""
*-* say "Hello" name"!"
>L> "Hello"
>V> "Kitty"
>O> "Hello Kitty"
>L> "!"
>O> "Hello Kitty!"
Hello Kitty!
Here, lines 3 and 4 set the variables
used in line 5. Execution of line 5 then proceeds in two stages. First
the string to be interpreted is built up, using a literal string,
a variable (INDIRECT), and another literal string.
The resulting pure character string is then interpreted, just as though
it were actually part of the original program. Because it is a new
clause, it is traced as such (the second *-* trace
flag under line 5) and is then processed. Again a literal string is
concatenated to the value of a variable (NAME) and
another literal, and the final result (Hello Kitty!)
is then displayed.
- For many purposes, you can use the VALUE function (see VALUE) instead of the INTERPRET instruction. The
following line could, therefore, have replaced line 5 in the last
example:
say "Hello" value(indirect)"!"
INTERPRET
is usually required only in special cases, such as when two or more
statements are to be interpreted together, or when an expression is
to be evaluated dynamically.