Most of the times, references look as follows:

<namespace:variablename>
or
<namespace:variablename=defaultvalue>

The latter example can be used to fall back to a default value in case a Reference cannot be resolved.
<notes:userdetails_internetaddress=>, for example, would fall back to an empty value if a user's internet email address can not be read from the public adressbook (e.g. when a user is offline).
<ini:ExitNotesPrompt=0>, for example, would return "0" (without quotes) if no such ini entry exists.

Referencing Actions
When referencing other Actions, MarvelClient allows you to specify a so called type of execution.
In the above examples, the colon (:) defines how a reference affects possible execution of an Action - in addition to using a colon, a reference also allows for other types of execution:
<namespace[type_of_execution]variableName>

There are three types of execution (all to be specified without brackets):

 

Types of Execution for Referencing Actions
: (colon)

= Run Once.
If the referenced Action was already executed, re-use result.
If the referenced Action has not yet executed, execute it.

NOTE: Referencing an Action can only bring it forward within the same Runtype, but NOT from a later Runtype.
If an Action was already executed at an earlier Runtype, the result can be re-used in any later Runtype(s).


Example:
Action A and B both reference Action C using a colon (:).
Action A will execute C, Action B will re-use the result from the previous execution of C.
In this case, Actions A and B will get the same result from Action C.

! (exclamation mark)

= Run Always.
(Re-)Execute Action whenever referenced.

NOTE: Referencing an Action can only bring it forward within the same Runtype, but NOT from a later Runtype.
If an Action was already executed at an earlier Runtype, the result can be re-used in any later Runtype(s).


Example:
Action A and B both reference Action C using an exclamation mark (!).
Action A will execute C, Action B will likewise again execute C.
In this case, Actions A and B may get different results from Action C.

| (pipe)= Never Run.
Use result only if already executed.

Example:
Action A references result from Action B using a colon (=make sure it runs).
Action C then references the result from Action B again using a | (=use result from Action B if it ran).
In case a user can not see or execute Action A, Action C will not run in this example, as the result from Action B cannot be resolved.


NOTE that whilst referencing anything other than Actions (e.g. os: or notes:, env: or ini:) also allows for the use of all three types of execution, this does not affect re-calculating any results.
<
notes!disk_client_free_mb>, for example, will not re-evaluate the free disk space but only return the free disk space in the Notes program directory from when the client was started.
In order to obtain a real-time result use a filesystem reference instead.
Naturally, ini: and env: references always return the corresponding result in real-time, even when using a colon (:) for the type of execution.


You are advised to only use a colon (:) for normal config variable references, as the behaviour for ! and | may change in future releases.