gawk: Dynamic Typing
9.2.5 Functions and Their Effects on Variable Typing
----------------------------------------------------
'awk' is a very fluid language. It is possible that 'awk' can't tell if
an identifier represents a scalar variable or an array until runtime.
Here is an annotated sample program:
function foo(a)
{
a[1] = 1 # parameter is an array
}
BEGIN {
b = 1
foo(b) # invalid: fatal type mismatch
foo(x) # x uninitialized, becomes an array dynamically
x = 1 # now not allowed, runtime error
}
In this example, the first call to 'foo()' generates a fatal error,
so 'awk' will not report the second error. If you comment out that
call, though, then 'awk' does report the second error.
Usually, such things aren't a big issue, but it's worth being aware
of them.