[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: What config file for a .pm perl module ?

On Fri, Dec 28, 2001 at 01:11:15PM +0100, Eric Van Buggenhaut wrote:
> 	print Dumper($virtula1);
> I spent some time try to understand why it was failing ;)

oops. yeah.  i should have cut-and-pasted the script i got working in
/tmp instead of what i originally typed in the message.  there were a
few obvious errors in the message.  but the point was to be provide
illustration of how to go about it, not an exact solution for your
problem.  i.e. method, not detail.

---cut here---
#! /usr/bin/perl -w

use Data::Dumper ;
use strict ;

my @fields = qw(hostname username password port database attributes 
                connect driver dbhost) ;

my $virtual1 = {} ;

while (<>) {
	chomp ;
	s/#.*// ;
	s/^\s*|\s*$//g ;   # strip leading & trailing spaces
	next if (/^$/) ;
	my @line = split /\|/ ;
	foreach(1..8) {  # loop from $fields[1]..$fields[8]
		$virtual1->{$line[0]}->{$fields[$_]} = $line[$_] ;
	} ;
} ;

print Dumper($virtual1) ;
---cut here---

from the (modified) input you provided, this produces output like this:

---cut here---
$VAR1 = {
          'personales' => {
                            'driver' => 'mysql',
                            'username' => 'root',
                            'attributes' => '{}',
                            'database' => 'acs',
                            'port' => '',
                            'password' => 'op.re,13',
                            'dbhost' => 'localhost',
                            'connect' => 'DBI:mysql:database=PaginasPersonales:host=localhost'
          'acs' => {
                     'driver' => 'mysql',
                     'username' => 'root',
                     'attributes' => '{}',
                     'database' => 'acs',
                     'port' => '',
                     'password' => 'op.re,13',
                     'dbhost' => 'localhost',
                     'connect' => 'DBI:mysql:database=acs:host=localhost'
---cut here---

which is pretty much the structure you wanted.

other comments:

i still think you should use a field separator which isn't in the field
contents - much simpler, and far less prone to error.

there's also no need to have quotes (`) around the connect string -
you'll only have to strip them off before using it.

also, why have the connect string at all when it can be built up from
the details provided in the other fields?  it seems to me that the
fields you need are:


the connect string can be built up like so:

	$connect = "DBI:$driver:database=$db_name:host=$db_host" ;

(using db_port, db_user, and db_password as well if required)


craig sanders <cas@taz.net.au>

Fabricati Diem, PVNC.
 -- motto of the Ankh-Morpork City Watch

Reply to: