OPTIONAL
SYNOPSIS
        string process_string(string str)

DESCRIPTION
        Searches string str for occurrences of a "value by function
        call", which is an implicit function call surrounded by @@. See
        "value_by_function_call" in the principles section.

        The value should contain a string like this:
        @@function[:filename][|arg|arg]@@

        <function> must return a string or else the string which should be
        processed will be returned unchanged.

        process_string() does not recurse over returned
        replacement values. If a function returns another function
        description, that description will not be replaced.

        Both the filename and the args are optional.

        Consecutive function calls can be written adjacent:

          @@function1@@function2@@

EXAMPLES
        string foo(string str) {
           return "ab"+str+"ef";
        }
        void func() {
           write(process_string("@@foo|cd@@")+"\n");
        }

        The function func() will print out the string "abcdef".

BUGS
        Using process_string() can lead to severe security problems.

HISTORY
        Because of the security problems, process_string() is an
        optional efun since 3.2.1@34
        LDMud 3.3.160 removed the undocumented 'feature' that a function call
        declaration could be terminated by a space. In turn this now allows
        the use of arguments with spaces.

SEE ALSO
        notify_fail(E), closures(LPC), get_bb_uid(M)
