INTERPRET
INTERPRET processes instructions that have been built dynamically by evaluating expression.
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.
Examples
-
data='FRED' interpret data '= 4' /* Builds the string "FRED = 4" and */ /* Processes: FRED = 4; */ /* Thus the variable FRED is set to "4" */ -
data='do 3; say "Hello there!"; end' interpret data /* Displays: */ /* Hello there! */ /* Hello there! */ /* Hello there! */
- 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 RorTRACE Iin effect is helpful. For example:/* Here is a small REXX program. */ Trace Int name='Kitty' indirect='name' interpret 'say "Hello"' indirect'"!"'When this is run, it gives the following 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, replace line 5 in the last example:
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.say "Hello" value(indirect)"!"
