SYNOPSIS<WRITE [APPEND] [OUTPUT] [SKIPONFAIL] [FLAGS=$flags] $file>
... output to file ...
</WRITE>
DESCRIPTION
The WRITE statement redirects the output generated inside its
block to the given $file, truncating if it exists.
The $file argument may also be
/dev/null or NUL redirect)-" (single dash) - stdout (i.e. no-op)--" (two dashes) - top-level stdout (i.e. "break through" all outer <CAPTURE>, <WRITE> etc. and print to output).---" (three dashes) - prints to stderr; this was added in version 7.01.1394744000 20140313.
If the APPEND flag is given, the file is appended to instead of truncated.
The OUTPUT flag acts as it does with <CAPTURE>,
i.e. the output of the block is also output normally (ala the Unix
tee command), in addition to being redirected to $file.
The SKIPONFAIL flag, when given, causes the code inside the
<WRITE> block to be skipped on failure of the $file to
be opened, instead of still being executed. This can be used in
situations where the block code is entirely optional or redundant if
the file-open fails, e.g. it is all logging code: it avoids the
overhead of running code whose output will be discarded anyway. On
the other hand, the default when SKIPONFAIL is not given -
always continue into the block even on file-open failure - ensures
potentially critical block code will always be run even if the file
cannot be opened, e.g. if a mix of critical and logging code is inside
the block.
The FLAGS argument value is a CSV list of zero or more of the
other flags. It allows flags to be specified dynamically at run-time
if needed.
DIAGNOSTICSWRITE has no effect on $ret.
EXAMPLE
This function appends a log message ($logmsg) to a log file:
<A NAME=logmsg>
<WRITE APPEND /tmp/log.txt>
<fmt "%t %s\n" "now" $logmsg>
</WRITE>
</A>
CAVEATS
The WRITE statement was added in version 2.1.901600000 19980728.
The empty-string, "-" and "--" functionality
of $file was added in version 4.00.1004670000 20011101.
The OUTPUT, SKIPONFAIL and FLAGS options were
added in version 7. In versions prior to 7, SKIPONFAIL was
effectively always on.
While the output of WRITE is buffered, simultaneous writes to
the same file by different processes is discouraged, as there is no
guarantee any process's data will be completely written before the
others'.