formatNAME
=picture line
value list
... .
Declares a named sequence of picture lines (with associated values) for use by the
write
function. If
NAME
is omitted, the name defaults to
STDOUT,
which happens to be the default format name for the
STDOUT
filehandle. Since, like a
sub
declaration, this is a global declaration that happens at compile time, any variables used in the value list need to be visible at the point of the format's declaration. That is, lexically scoped variables must be declared earlier in the file, while dynamically scoped variables merely need to be set in the routine that calls
write
. Here's an example (which assumes we've already calculated
$cost
and
$quantity
):
my $str = "widget"; # A lexically scoped variable. format Nice_Output = Test: @<<<<<<<< @||||| @>>>>> $str, $%, '$' . int($num) . $~ = "Nice_Output"; # Select our format. local $num = $cost * $quantity; # Dynamically scoped variable. write;
Like filehandles, format names are identifiers that exist in a symbol table (package) and may be fully qualified by package name. Within the typeglobs of a symbol table's entries, formats reside in their own namespace, which is distinct from filehandles, directory handles, scalars, arrays, hashes, or subroutines. Like those other six types, however, a format named
Whatever
would also be affected by a
local
on the
*Whatever
typeglob. In other words, a format is just another gadget contained in a typeglob, independent of the other gadgets.
The "Formats" section in Chapter 2 contains numerous details and examples of their use. The "Per Filehandle Special Variables" and "Global Special Variables" sections in Chapter 2 describe the internal format-specific variables, and the English and FileHandle modules in Chapter 7 provide easier access to them.