Show in Frame No Frame
Up Previous Next Title Page Index Contents Search

6.5.1 Simple variable use

As elsewhere in MERL, all variables are simply strings; some operations will allow them to be treated like numbers or collections of lines, or even collections of objects, and most will also maintain any text formatting, including Live Code links. (For more on variables as collections of objects, see “Iterating over texts as collections of objects” in 6.3.5.)

MERL supports both global and local variables. Global variables, denoted with prefix $, have global visibility and scope, and last for a whole generator run, whereas local variables, denoted by prefix @, are scoped to a single invocation of a generator they have been defined in. Global and local variables are in separate namespaces, i.e. $foo has no relationship to @foo.
->There is also a third, separate category of variables in MetaEdit+: session-persistent variables. These can only be accessed by command-line string functions getVar: / setVar:value: (Section 10.2), callable from MERL with internal...read/execute (Section 6.4.8).

To assign a simple variable with a fixed string, simple command, chain output command (e.g. :Name, explosions), other variable’s value, or result of a subgenerator call:
$variableName1 = 'variableValue'
$variableName2 = id
@variableName3 = $variableName2
@variableName4 = @variableName5 = @variableName6 = ''
@variableName5 = subgeneratorName()
For cases where the right hand side would consist of more than one command, a special case of the last example allows us to use this short syntax: the generator called “__” simply returns its argument, which is formed by concatenation:
@variableName5 = __(id ': ' type)
For longer assignments, it is better (and slightly faster) to use the explicit variable..write/append..close commands (Section 6.5.2).

To output the value of a variable, or use it in an if condition etc., use:
$variableName
@variableName
Local variables are also used to hold the values of the passed parameters within a subgenerator. They are declared in the header (Section 6.2.1) with their @ prefix, and can be used and even reassigned in the body of the subgenerator. Note that as arguments are passed by value, this will only affect the local variable in this subgenerator, not the argument in the calling generator.

Show in Frame No Frame
Up Previous Next Title Page Index Contents Search