NAME
    MySQL::Config - Parse and utilize MySQL's /etc/my.cnf and ~/.my.cnf
    files

SYNOPSIS
        use MySQL::Config;

        my @groups = qw(client myclient);
        my $argc = 0;
        my @argv = ();

        load_defaults "my", \@groups, \$argc, \@argv;

DESCRIPTION
    "MySQL::Config" emulates the "load_defaults" function from
    libmysqlclient. Just like "load_defaults", it will fill an aray with
    long options, ready to be parsed by "getopt_long", a.k.a.
    "Getopt::Long".

THE my.cnf FILE
    MySQL's my.cnf file is a mechanism for storing and reusing command line
    arguments. These command line arguments are grouped into *groups* using
    a simple INI-style format:

        ; file: ~/.my.cnf

        [client]
        user = darren
        host = db1
        pager = less -SignMEX

        [mytop]
        color = 1
        header = 0

    Each element in "[", "]" pairs is a *group*, and each call to
    "load_defaults" will specify 0 or more groups from which to grab
    options. For example, grabbing the *client* group from the above config
    file would return the *user*, *host*, and *pager* items. These items
    will be formatted as command line options, e.g., *--user=darren*.

USING MySQL::Config
  load_defaults("name", \@groups, \$count, \@ary)
    "load_defaults" takes 4 arguments: a string denoting the name of the
    config file (which should generally be *my*); a reference to an array of
    groups from which options should be returned; a reference to a scalar
    that will hold the total number of parsed elements; and a reference to
    an array that will hold the final versions of the extracted name, value
    pairs. This final array will be in a format suitable for processing with
    "Getopt::Long":

        --user=username
        --password=password

    and so on.

    If the final array reference is missing, @ARGV will be used. Options
    will be pushed onto the end of the array, leaving what is already in
    place undisturbed.

    The scalar (the third argument to "load_defaults") will contain the
    number of elements parsed from the config files.

  parse_defaults("name", \@groups)
    "load_defaults" has an un-Perlish interface, mostly because it is
    exactly the same signature as the version from the C API. There is also
    a function, not exported by default, called "parse_defaults", which
    returns a hash of parsed (name, value) pairs (or a hashref in scalar
    context):

        use MySQL::Config qw(parse_defaults);

        my %cfg = parse_defaults "my", \@groups;

    %cfg looks like:

        %cfg = (
            "user" => "username",
            "password" => "password",
        )

    and so on. This might be a more natural interface for some programs;
    however, "load_defaults" is more true to the original.

    Because "parse_defaults" flattens the arguments into a hash, it makes
    special allowances for variables that contain multiple "="; these are
    turned into nested hashes. For example, the MySQL's *set-variable*
    option can contain name value pairs, like so:

        set-variable    = key_buffer=16M
        set-variable    = max_allowed_packet=1M
        set-variable    = table_cache=64
        set-variable    = sort_buffer=512K
        set-variable    = net_buffer_length=8K
        set-variable    = myisam_sort_buffer_size=8M

    These will be turned into a nested hash like this:

        'set-variable' => {
                            'myisam_sort_buffer_size' => '8M',
                            'sort_buffer' => '512K',
                            'max_allowed_packet' => '16M',
                            'key_buffer' => '16M',
                            'table_cache' => 64,
                            'net_buffer_length' => '8K'
                          },

    This is not done for "load_defaults", as "Getopt::Long" will correctly
    handle variables with embedded "=" if the option is passed a hash
    reference.

USING SOMETHING OTHER THAN "my" AS THE FIRST STRING
    This string controls the name of the configuration file; the names work
    out to, basically ~/.${cfg_name}.cnf and /etc/${cnf_name}.cnf.

    If you are using this module for mysql clients, then this should
    probably remain *my*. Otherwise, you are free to mangle this however you
    choose:

        $ini = parse_defaults 'superapp', [ 'foo' ];

SUPPORT
    "MySQL::Config" is supported by the author.

VERSION
    This is "MySQL::Config", version 1.04.

AUTHOR
    darren chamberlain <darren@cpan.org>

COPYRIGHT
    (C) 2003 darren chamberlain

    This library is free software; you may distribute it and/or modify it
    under the same terms as Perl itself.

SEE ALSO
    Perl

