I have a module which makes connections to databases via the Perl DBI by way of information stored via AppConfig (ABW's CPAN module)... which actually means via an AppConfig file or via simple or complex command-line control. Docs included below.
I am torn between naming it AppConfig::DBI and DBIx::Connect. Randy Ray made a great point when he thought that naming it AppConfig::DBI would imply that I had implemented a way of configuring apps via databases. So I renamed it DBIx::Connect. Perhaps DBIx::AppConfig::Connect is the best name? NAME DBIx::Connect - support for DBI connection (info) via AppConfig SYNOPSIS # .cshrc setenv APPCONFIG /Users/metaperl/.appconfig setenv DBIX_CONN "${APPCONFIG}-dbi" # .appconfig-dbi [basic] user = postgres pass = <STDIN> dsn = dbi:Pg:dbname=mydb attr RaiseError = 0 attr PrintError = 0 attr Taint = 1 # DBIx::AnyDBD usage: my @connect_data = DBIx::Connect->data_for('dev_db'); my $dbh = DBIx::AnyDBD->connect(@connect_data, "MyClass"); # pure DBI usage use DBIx::Connect; my $config = shift or die "must give label for config"; my $dbh = DBIx::Connect->to($config); # over-ride .appconfig-dbi from the command line: perl dbi-script.pl basic -basic_user tim_bunce -basic_pass dbi_rocks perl dbi-script.pl basic -basic_attr "RaiseError=1" -basic_attr "Taint=0" DESCRIPTION This module facilitates DBI-style or DBIx::AnyDBD-style database connections for sites and applications which make use of AppConfig to configure their applications via files and/or command-line arguments. It provides two methods, "to" and "data_for" which return a DBI database handle and an array of DBI connection info, respectively. Each of the 4 DBI connection parameters (username, password, dsn, attr) can be defined via any of the methods supported by AppConfig, meaning via a configuration file, or simple-style command-line arguments. AppConfig also provides support for both simple and Getopt::Long style, but Getopt::Long is overkill for a module this simple. RELATED MODULES / MOTIVATION FOR THIS ONE The only module similar to this on CPAN is DBIx::Password. Here are some points of comparison/contrast. * DBI configuration info location DBIx::Password uses an autogenerated Perl module for its connection data storage. DBIx::Connect uses a Windows INI-style AppConfig file for its connection information. The advantage of a config file is that each programmer can have his own config file whereas it could prove tedious for each programmer to have his own personal copy of a Perl configuration module. Not to mention the fact that if each Perl module in your large application went this route, you would be stuck with n-fold Perl configuration modules as opposed to one centralized AppConfig file. For example, my module SQL::Catalog, used to use on-the-fly Config modules and Net::FTP::Common did as well. * Routes to configurability and password security DBIx::Password DBI connection options (username, password, dsn, attr) are not over-ridable or settable at the command line. This means passwords must be stored in the configuration file and that efforts must be taken to make a module readable by a program not readable by a human. In contrast, DBIx::Connect can add configuration information upon invocation via the command-line or via the "read-from-STDIN-flag", "<STDIN">, which will overwrite or set arguments which could have been in the configuration file, which means your passwords need not be stored on disk at all. * Support for indirect connection vis-a-vis connection, DBIx::Password has one method, "connect" which returns a $dbh. While DBIx::Connect also supplies such a method (named "to"), it also supplies a "data_for" method which returns an array which can be passed to any other DBI connection scheme, the must ubiquitous of which is DBIx::AnyDBD, which handles connections for you after you give it the connection data. I submitted a patch to the author of DBIx::Password to support such functionality, but it was rejected on the grounds that DBIx::Password is designed to secure connection data, not make it available in any form or fashion. My CPAN module set will be AppConfig-dependant From now on, any module of mine which requires configuration info will use AppConfig to get it. I thought about using XML but a discussion on Perlmonks.Org and one on [EMAIL PROTECTED] both made strong arguments in favor of AppConfig. EXPORT None by default. AUTHOR T. M. Brannon <[EMAIL PROTECTED]> SEE ALSO DBIx::Password AppConfig AppConfig::Std DBI Term::ReadKey $terrence = { hobby => Class::MakeMethods -> hacker (type => 'Just Another'), addiction => 'Chess on ICC as princepawn', job => 'seeking' , URL => 'http://www.metaperl.com' };