With most interpreters, you're allowed to modify the contents of the args passed to your external function. (For example, you can overwrite the contents of an arg's data buffer, so long as you don't exceed the RXSTRING's strlength). But you shouldn't change the RXSTRING's strptr or strlength fields. And modifying the contents of those args is not reflected back in the script. (So, you can't use this as a way of returning new data to the script). But beware that this was never standardized, so some interpreters may behave strangely if you modify the contents of an arg passed to you. Reginald does not care if you modify the contents of args.

Some interpreters limit how many args a script can pass to your function. (The minimal acceptable limit is 16 args, so to be compatible with all interpreters, don't design a function that expects more than that). But Reginald does not limit how many args can be passed to a function.