Variable references

Like in other programming languages, we have the capability of taking references to variables, by using the prefix backslash (\) operator for referencing and the prefix asterix (*) operator for dereferencing:

var name = "sidef"
var ref = \name
var original = *ref

Variable references are useful when passing them to functions (or methods) for assigning values.

func assign2ref (ref, value) {
    *ref = value
}

var x = 10
assign2ref(\x, 20)
say x                 # prints: 20

There is also the possibility of taking references to the lvalues of an array or hash:

var a = [41, 42, 43]
var r = \a[1]           # reference of the second element

*r = 99                 # changes the value inside the array
say a                   # prints: [41, 99, 43]