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