6.5. Global variables and scope of variables

Like most programming languages, GEL has two different types of variables: local and global. A local variable only exists in the context of the function where it is set and all functions called from inside this function. A global variable exists in all contexts. When you set a variable on the toplevel command line, outside of any function, then it will be a global. All functions will see it.

When you set a variable inside a function, it will only be seen inside the function, including all function calls that are made inside this function. This is where GEL differs from a language such as C. One could describe local variables as being semi global in this sense. For example the following code will print out 5. but the function g cannot be called on the top level as a will not be defined.

function f() = (a:=5; g());
function g() = print(a);
f();

Suppose you assign a value to an identifier inside a function, and this identifier is also used for a global variable, or a variable set in a calling function. Then this has the effect of creating a new local variable inside the function. For example the following code will print out 6 and not 5.

a=6;
function f() = (a:=5);
print(a);

Sometimes however it is neccessary to set a global variable from inside a function. For this, use the set function. Passing a string or a quoted identifier to this function sets the variable globally. For example, to set a to the value 3 you could call:

set(`a,3)
or:
set("a",3)

The set function always sets the toplevel global. There is no way to set a local variable in some function from a subroutine. For this you must use passing by reference.