perldoc > CGI::FormBuilder::Source::File(3pm)

NAME
    CGI::FormBuilder::Source::File - Initialize FormBuilder from external file

SYNOPSIS
        # use the main module
        use CGI::FormBuilder;

        my $form = CGI::FormBuilder->new(source => 'form.conf');

        my $lname = $form->field('lname');  # like normal

DESCRIPTION
    This parses a file that contains FormBuilder configuration options, and returns a hash suitable
    for creating a new $form object. Usually, you should not use this directly, but instead pass a
    $filename into "CGI::FormBuilder", which calls this module.

    The configuration format steals from Python (ack!) which is sensitive to indentation and
    newlines. This saves you work in the long run. Here's a complete form:

        # form basics
        method: POST
        header: 1
        title:  Account Information

        # define fields
        fields:
            fname:
                label:   First Name
                size:    40

            minit:
                label:   Middle Initial
                size:    1

            lname:
                label:   Last Name
                size:    60

            email:
                size:    80

            phone:
                label:    Home Phone
                comment:  (optional)
                required: 0

            sex:
                label:   Gender
                options: M=Male, F=Female
                jsclick: javascript:alert('Change your mind??')

            # custom options and sorting sub
            state:
                options:  \&getstates
                sortopts: \&sortstates

            datafile:
                label:   Upload Survey Data
                type:    file
                growable:   1

        # validate our above fields
        validate:
            email:  EMAIL
            phone:  /^1?-?\d{3}-?\d{3}-?\d{4}$/

        required: ALL

        # create two submit buttons, and skip validation on "Cancel"
        submit:  Update, Cancel
        jsfunc:  <<EOJS
      // skip validation
      if (this._submit.value == 'Cancel') return true;
    EOJS

        # CSS
        styleclass: acctInfoForm
        stylesheet: /style/acct.css

    Any option that FormBuilder accepts is supported by this configuration file. Basically, any time
    that you would place a new bracket to create a nested data structure in FormBuilder, you put a
    newline and indent instead.

    Multiple options MUST be separated by commas. All whitespace is preserved intact, so don't be
    confused and do something like this:

        fields:
            send_me_emails:
                options: Yes No

    Which will result in a single "Yes No" option. You want:

        fields:
            send_me_emails:
                options: Yes, No

    Or even better:

        fields:
            send_me_emails:
                options: 1=Yes, 0=No

    Or perhaps best of all:

        fields:
            send_me_emails:
                options: 1=Yes Please, 0=No Thanks

    If you're confused, please join the mailing list:

        fbusers-subscribe AT formbuilder.org

    We'll be able to help you out.

METHODS
  new()
    This creates a new "CGI::FormBuilder::Source::File" object.

        my $source = CGI::FormBuilder::Source::File->new;

    Any arguments specified are taken as defaults, which the file then overrides. For example, to
    always turn off "javascript" (so you don't have to in all your config files), use:

        my $source = CGI::FormBuilder::Source::File->new(
                          javascript => 0
                     );

    Then, every file parsed by $source will have "javascript => 0" in it, unless that file has a
    "javascript:" setting itself.

  parse($source)
    This parses the specified source, which is either a $file, "\$string", or "\@array", and returns
    a hash which can be passed directly into "CGI::FormBuilder":

        my %conf = $source->parse('myform.conf');
        my $form = CGI::FormBuilder->new(%conf);

  write_module($modname)
    This will actually write a module in the current directory which you can then use in subsequent
    scripts to get the same form:

        $source->parse('myform.conf');
        $source->write_module('MyForm');    # write MyForm.pm

        # then in your Perl code
        use MyForm;
        my $form = MyForm->new;

    You can also override settings from "MyForm" the same as you would in FormBuilder:

        my $form = MyForm->new(
                        header => 1,
                        submit => ['Save Changes', 'Abort']
                   );

    This will speed things up, since you don't have to re-parse the file every time. Nice idea
    Peter.

NOTES
    This module was completely inspired by Peter Eichman's "Text::FormBuilder", though the syntax is
    different.

    Remember that to get a new level in a hashref, you need to add a newline and indent. So to get
    something like this:

        table => {cellpadding => 1, cellspacing => 4},
        td    => {align => 'center', bgcolor => 'gray'},
        font  => {face => 'arial,helvetica', size => '+1'},

    You need to say:

        table:
            cellpadding: 1
            cellspacing: 4

        td:
            align: center
            bgcolor: gray

        font:
            face: arial,helvetica
            size: +1

    You get the idea...

SEE ALSO
    CGI::FormBuilder, Text::FormBuilder

REVISION
    $Id: File.pm 100 2007-03-02 18:13:13Z nwiger $

AUTHOR
    Copyright (c) Nate Wiger <http://nateware.com>. All Rights Reserved.

    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.

CGI::FormBuilder::Source::File(3pm)
NAME SYNOPSIS DESCRIPTION METHODS NOTES SEE ALSO REVISION AUTHOR

Generated by phpman v4.9.22-1-g1b0fcb4 · Markdown · JSON · MCP Author: Che Dong Under GNU General Public License
2026-07-05 08:59 @216.73.216.52
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 Transitional!Valid CSS!

^_top_^