---
name: "CGI::FormBuilder::Source"
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::Source"
---

# CGI::FormBuilder::Source(3pm)

Source adapters for FormBuilder

## NAME

CGI::FormBuilder::Source - Source adapters for FormBuilder

## SYNOPSIS

```
    # Define a source adapter
    package CGI::FormBuilder::Source::Whatever;
    sub new {
        my $self  = shift;
        my $class = ref($self) || $self;
        my %opt   = @_;
        return bless \%opt, $class;
    }
    sub parse {
        my $self = shift;
        my $file = shift || $self->{source};
        # open the file and parse it, or whatever
        my %formopt;
        open(F, "<$file") || die "Can't read $file: $!";
        while (<F>) {
            # ... do stuff to the line ...
            $formopt{$fb_option} = $fb_value;
        }
        # return hash of $form options
        return wantarray ? %formopt : \%formopt;
    }
```

## DESCRIPTION

This documentation describes the usage of **FormBuilder** sources, as well as how to write your own source adapter.

An external source is invoked by using the `"source"` option to the top-level `new()` method:

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

This example points to a filename that contains a file following the `"CGI::FormBuilder::Source::File"` layout. Like with the `"template"` option, you can also specify `"source"` as a reference to a hash, allowing you to use other source adapters:

```
    my $form = CGI::FormBuilder->new(
                    fields => \@fields,
                    source => {
                        type => 'File',
                        source => '/path/to/source.conf',
                    }
               );
```

The `"type"` option specifies the name of the source adapter. Currently accepted types are:

```
    File  -  CGI::FormBuilder::Source::File
```

In addition to one of these types, you can also specify a complete package name, in which case that module will be autoloaded and its `new()` and `parse()` routines used. For example:

```
    my $form = CGI::FormBuilder->new(
                    fields => \@fields,
                    source => {
                        type => 'My::Source::Module',
                        somefile => '/path/to/source.conf',
                    }
               );
```

All other options besides `"type"` are passed to the constructor for that source module verbatim, so it's up to you and/or the source module on how these additional options should be handled.

## SEE ALSO

CGI::FormBuilder, CGI::FormBuilder::Source::File,

## REVISION

`$Id:` Source.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.
