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.