---
name: "CGI::FormBuilder::Template::Fast"
section: "3pm"
platform: "linux"
package: "perl-cgi-formbuilder"
version: "3.20-3"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/CGI::FormBuilder::Template::Fast"
---

# CGI::FormBuilder::Template::Fast(3pm)

FormBuilder interface to CGI::FastTemplate

## NAME

CGI::FormBuilder::Template::Fast - FormBuilder interface to CGI::FastTemplate

## SYNOPSIS

```
    my $form = CGI::FormBuilder->new(
        fields   => \@whatever,
        template => {
            type => 'Fast',
            root => '/path/to/templates',
            # use external files
            define => {
                form           => 'form.txt',
                field          => 'field.txt',
                invalid_field  => 'invalid_field.txt',
            },
            # or define inline
            define_nofile => {
                form => '<html><head></head><body>$START_FORM
                         <table>$FIELDS</table>$SUBMIT $END_FORM</body></html>',
                # etc.
            },
        },
   );
```

## DESCRIPTION

This engine adapts **FormBuilder** to use `"CGI::FastTemplate"`. Please read these docs carefully, as the usage differs from other template adapters in several important ways.

You will need to define three templates: `"form"`, `"field"`, and `"invalid_field"`. You can use `"define"` to point to external files (which is the recommended `"CGI::FastTemplate"` style), or `"define_nofile"`/ `"define_raw"` to define them inline. The templates in `"define_nofile"` take precedence over `"define_raw"`, and both of these take precedence over `"define"`.

```
    my $form = CGI::FormBuilder->new(
        # ...
        template => {
            type => 'FastTemplate',
            root => '/path/to/templates',
            define => {
                form           => 'form.txt',
                field          => 'field.txt',
                invalid_field  => 'invalid_field.txt',
            },
            # or, you can define templates directly
            define_nofile => {
                form => '<html><head></head><body>$START_FORM<table>'
                        '$FIELDS</table>$SUBMIT $END_FORM</body></html>',
                # etc.
            },
        },
        # ...
    );
```

If you use `"define"` with external templates, you will probably also want to define your template root directory with the `"root"` parameter.

Within each of the field templates, the following variables are available:

```
    $NAME         # $field->name
    $FIELD        # $field->tag   (HTML input tag)
    $VALUE        # $field->value (first value only!)
    $LABEL        # $field->label
    $COMMENT      # $field->comment
    $ERROR        # $field->error
    $REQUIRED     # $field->required ? 'required' : 'optional'
```

All the fields are processed in sequence; valid fields use the  `"field"` template, and invalid fields the `"invalid_field"` template. The result from each of these is appended into the `$FIELDS` variable, which you should use in your `"form"` template. In the  `"form"` template, you also have access to these variables:

```
    $TITLE        # title of the form
    $START_FORM   # opening form tag
    $SUBMIT       # the submit button
    $RESET        # the reset button
    $END_FORM     # closing form tag
    $JS_HEAD      # validation JavaScript
```

Note that since `"CGI::FastTemplate"` doesn't use anything other than  simple scalar variables, there are no variables corresponding to the lists that other engines have (e.g. `"fields"` or `"options"`  lists in `"TT2"` or `"Text::Template"`).

## SEE ALSO

CGI::FormBuilder, CGI::FormBuilder::Template, CGI::FastTemplate

## AUTHOR

Copyright (c) 2005-2006 Peter Eichman \<peichman@cpan.org\>. All Rights Reserved.

Maintained as part of `"CGI::FormBuilder"` by Nate Wiger \<nate@wiger.org\>.

This module is free software; you may copy this under the terms of the GNU General Public License, or the Artistic License, copies of which should have accompanied your Perl kit.
