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.