[Chapter 3] 3.2.41 format
Author: Larry Wall, Tom Christiansen & Randal L. Schwartz
Date: 1999-07-02T01:49:22Z

#

| Chapter 3 Functions |

### 3.2.41 format

    format NAME =
        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.

3.2.40 fork |  | 3.2.42 formline