# $EPIC: lval.txt,v 1.1 2007/08/06 21:25:50 jnelson Exp $
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 |
An lvalue may be prefixed with zero, one, or two colons:
An lvalue contains any number of characters:
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.
/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.