|
Packit |
575503 |
Copyright (C) 1992, 1995, 1998, 2001, 2006, 2007, 2010, 2011, 2015
|
|
Packit |
575503 |
Free Software Foundation, Inc.
|
|
Packit |
575503 |
|
|
Packit |
575503 |
Copying and distribution of this file, with or without modification,
|
|
Packit |
575503 |
are permitted in any medium without royalty provided the copyright
|
|
Packit |
575503 |
notice and this notice are preserved.
|
|
Packit |
575503 |
--------------------------------------------------------------------------
|
|
Packit |
575503 |
Thu Feb 12 08:51:22 IST 2015
|
|
Packit |
575503 |
============================
|
|
Packit |
575503 |
This file documents several things related to the 2008 POSIX standard
|
|
Packit |
575503 |
that I noted after reviewing it.
|
|
Packit |
575503 |
|
|
Packit |
575503 |
1. POSIX leaves undefined what happens for something like
|
|
Packit |
575503 |
|
|
Packit |
575503 |
awk '{ print ; exit }' if=42 /etc/passwd
|
|
Packit |
575503 |
|
|
Packit |
575503 |
Mawk diagnoses this. Gawk and BWK awk do not. This doesn't seem to be
|
|
Packit |
575503 |
worth the effort to add the code, but at least I'm aware of it.
|
|
Packit |
575503 |
|
|
Packit |
575503 |
2. The 2001-2004 standards accidentally required support for hexadecimal
|
|
Packit |
575503 |
floating point constants and for Infinity and Not-A-Number (NaN) values.
|
|
Packit |
575503 |
|
|
Packit |
575503 |
The 2008 standard now explicitly allows, but does not require, such
|
|
Packit |
575503 |
support.
|
|
Packit |
575503 |
|
|
Packit |
575503 |
More discussion is provided in the node `POSIX Floating Point Problems'
|
|
Packit |
575503 |
in gawk.texi.
|
|
Packit |
575503 |
|
|
Packit |
575503 |
3. String comparison with <, <= etc is supposed to take the locale's collating
|
|
Packit |
575503 |
sequence into account. By default gawk doesn't do this. Rather, gawk
|
|
Packit |
575503 |
will do this only if --posix is in effect.
|
|
Packit |
575503 |
|
|
Packit |
575503 |
4. According to POSIX, the function parameters of one function may not have
|
|
Packit |
575503 |
the same name as another function, making this invalid:
|
|
Packit |
575503 |
|
|
Packit |
575503 |
function foo() { ... }
|
|
Packit |
575503 |
function bar(foo) { ...}
|
|
Packit |
575503 |
|
|
Packit |
575503 |
Or even:
|
|
Packit |
575503 |
|
|
Packit |
575503 |
function bar(foo) { ...}
|
|
Packit |
575503 |
function foo() { ... }
|
|
Packit |
575503 |
|
|
Packit |
575503 |
Gawk enforces this only with --posix.
|
|
Packit |
575503 |
|
|
Packit |
575503 |
The following things aren't described by POSIX but ought to be:
|
|
Packit |
575503 |
|
|
Packit |
575503 |
1. The value of $0 in an END rule
|
|
Packit |
575503 |
|
|
Packit |
575503 |
2. The return value of a function that either does return with no value
|
|
Packit |
575503 |
or that falls off the end of the function body.
|
|
Packit |
575503 |
|
|
Packit |
575503 |
3. What happens with substr() if start is <= 0, or greater than the length
|
|
Packit |
575503 |
of the string, or if length is <= 0.
|
|
Packit |
575503 |
|
|
Packit |
575503 |
4. Whether "next" can be invoked from a function body.
|