# $EPIC: lval.txt,v 1.1 2007/08/06 21:25:50 jnelson Exp $ ======Lvalues (aka lvals)====== An lvalue is the token on the left hand side of an assignment operation. More broadly speaking, an lvalue is a //thing// that may be //assigned to//. There are several places where you use an lvalue: | /assign **lval** stuff | Global variable to be assigned a value | | /local **lval** stuff | Local variable to be assigned a value | | @ **lval** = stuff | Global variable to be assigned a value | | /stub assign **lval** filename | Global variable to be loaded on demand | | $unshift(**lval** stuff) | Prepending to a global variable | | /unshift **lval** stuff | Prepending to a global variable | | $push(**lval** stuff) | Appending to a global variable | | /push **lval** stuff | Appending to a global variable | | $shift(**lval** stuff) | Prepending to a global variable | | /shift **lval** stuff | Prepending to a global variable | | $pop(**lval** stuff) | Prepending to a global variable | | /pop **lval** stuff | Prepending to a global variable | | $aliasctl(SET **lval** ...) | | | @ **lval**++ | | | @ **lval**-- | | | Any math operator that does an assignment | | | $splice(**lval** stuff) | | | $shiftbrace(**lval**) | | | $sar(r/old/new/**lval**) | | | $msar(r/old/new/**lval**) | | | $getopt(...) | | | /fe (...) **lvals** {...} | | | /fe :**lval** (...) **lvals** {...} | | | Arglists | | ======What an lvalue looks like====== An lvalue may be prefixed with zero, one, or two colons: * Zero colons means use a local variable if there is one, otherwise use a global variable. * One colon means use a local variable only * Two colons means use a global variable only An lvalue contains any number of characters: * Any isalpha(3) character * Any isdigit(3) character * The underscore ("_") * The dot (".") Followed by any number of //array subexpressions//, which are any text expression surrounded by square brackets. There are no restrictions on what may be inside an array subexpression. ======Examples:====== /assign myvar one /echo $myvar Will output "one" /local myvar two /echo $myvar Will output "two" because local variables overrule global variables /echo $::myvar Will output "one" because two colons forces the global variable to be used. /assign :othervar one Creates a //local// variable, because one colon is prefixed. /assign ::othervar two Creates a //global// variable, because two colons are prefixed. /assign othervar three Changes the //local// variable, because local variables overrule global vars. @ myvar$testing = [one] Invalid because $'s are not allowed in variable names @ myvar[$testing] = [one] Allowed, because array subexpressions can contain any text expression. Please note that //array subexpressions// are part of the **lval** and are always treated as text, even in an expression! @ myvar.$function() = [one] Invalid, because no $'s are permitted @ myvar[$function()] = [one] Permitted, because the array subexpression can contain any text.