CONCEPT
        references

DESCRIPTION
        Call by reference can be used to have a function that passes
        more than one value to the caller, without using arrays that
        have to be unpacked thereinafter.
        There is nothing special to declare in the calling function,
        you simply do an assignment to a parameter of the function.
        The caller has to pass references explicitely; this is done by
        prefixing an lvalue with '&' .
        To pass a reference to an element of an array, you have to
        enclose the indexed lvalue in round brackets.

EXAMPLE

        void assign(mixed destination, mixed source) {
            destination = source;
        }

        void extract_number(int destination, string source) {
            sscanf(source, "%d", destination);
        }

        void test() {
            int i;
            float f;
            mixed *a;

            extract_number(&i, "42 palantirs");
            assign(&f, 3.141592653589793);
            assign(&a, ({ i, f }));
            assign(&(a[<0..<1]), ({1,2,3,"sink","x","y","x"}));
            assign(&(a[5][0]), 'w');
            assign(&(a[5][<1]), 'g');
            printf("%O", a));
        }

        ({ /* sizeof() == 9 */
          42,
          3.14159,
          1,
          2,
          3,
          "wing",
          "x",
          "y",
          "x"
        })
