gawk: Functions Summary
9.4 Summary
===========
* 'awk' provides built-in functions and lets you define your own
functions.
* POSIX 'awk' provides three kinds of built-in functions: numeric,
string, and I/O. 'gawk' provides functions that sort arrays, work
with values representing time, do bit manipulation, determine
variable type (array versus scalar), and internationalize and
localize programs. 'gawk' also provides several extensions to some
of standard functions, typically in the form of additional
arguments.
* Functions accept zero or more arguments and return a value. The
expressions that provide the argument values are completely
evaluated before the function is called. Order of evaluation is
not defined. The return value can be ignored.
* The handling of backslash in 'sub()' and 'gsub()' is not simple.
It is more straightforward in 'gawk''s 'gensub()' function, but
that function still requires care in its use.
* User-defined functions provide important capabilities but come with
some syntactic inelegancies. In a function call, there cannot be
any space between the function name and the opening left
parenthesis of the argument list. Also, there is no provision for
local variables, so the convention is to add extra parameters, and
to separate them visually from the real parameters by extra
whitespace.
* User-defined functions may call other user-defined (and built-in)
functions and may call themselves recursively. Function parameters
"hide" any global variables of the same names. You cannot use the
name of a reserved variable (such as 'ARGC') as the name of a
parameter in user-defined functions.
* Scalar values are passed to user-defined functions by value. Array
parameters are passed by reference; any changes made by the
function to array parameters are thus visible after the function
has returned.
* Use the 'return' statement to return from a user-defined function.
An optional expression becomes the function's return value. Only
scalar values may be returned by a function.
* If a variable that has never been used is passed to a user-defined
function, how that function treats the variable can set its nature:
either scalar or array.
* 'gawk' provides indirect function calls using a special syntax. By
setting a variable to the name of a function, you can determine at
runtime what function will be called at that point in the program.
This is equivalent to function pointers in C and C++.