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 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