For Programmers: Free Programming Magazines  


Home > Archive > PERL Beginners > August 2005 > Using Config files and variables.









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Using Config files and variables.
Christopher L Hood

2005-07-31, 5:15 pm

Ok , all file contents and code are below, this is a sort of complicated
issue. I have a config file with customer static information , a couple of
modules, and a script. The basis of the problem is that in the config file
there is an sql query that has some variables in it. The script calls one
module to get the information , then another to use the information. The
problem is that the variables in the config are not being translated into
there actual values before they get used.



Any fresh ideas would be greatly appreciated. If more information is
needed please contact me directly and I will provide what I can.



*****Script Here*****

use strict;

unshift (@INC, "/home/aup/scripts/development/modules/");



use DSLLookup;



my @customerResults = DSLLookup::GetCustomer('vzd');

my $oraResults =
DSLLookup::GetInfo(@customerResults,'192
.168.102.112','TARJ 3-PTO 2');



***** End Script *****







***** Start DSLLookup Module *****



use DBI;

use Config::IniFiles;



# Declare global variables.

our $DB;

our $HOST;

our $TABLE;

our $SID;

our $count;

our $row;

our $total;

our $username;

our $password;

our $ORAPORT;

our $customer;

our $QUERY;





sub GetCustomer {



my($customer) = @_;



my $cfg = new Config::IniFiles( -file =>
"/home/aup/scripts/development/configs/$customer/customer.cfg");



$HOST = $cfg->val('AUP', 'host');

$DB = $cfg->val('AUP', 'db');

$SID = $cfg->val('AUP', 'sid');

$username = $cfg->val('AUP', 'username');

$password = $cfg->val('AUP', 'password');

$ORAPORT = $cfg->val('AUP', 'oraport');

$QUERY = $cfg->val('AUP', 'query');



return ($customer,$HOST,$DB,$SID,$username,$pas
sword,$ORAPORT,$QUERY);



} # End GetCustomer



sub GetInfo {



# pre declare some global variables. #



my
($affiliate,$HOST,$DB,$SID,$username,$pa
ssword,$ORAPORT,$QUERY,$ip_address
,$dslam) = @_;



# Connect to the database.

my $dbh =
DBI->connect(" DBI:Oracle:database=$DB;host=$HOST;sid=$
SID;port=$ORAPORT","
$username","$password", {'RaiseError' => 1});



# Now retrieve data from the table.

my $sth = $dbh->prepare(qq{$QUERY});



#print "DEBUG: $QUERY\n";



$sth->execute;



while ( my @row = $sth->fetchrow_array) {

$ip_address = "$row[0]\n";

my $node_address = "$row[1]\n";

my $last_nm = "$row[2]\n";

my $first_name;

if(!$row[3]){

$first_name = "\n";

}else{

$first_name = "$row[3]\n";

}

my $related_pon = "$row[4]\n";

my $addr_lin1 = "$row[5]\n";

print "IP: $ip_address DSLAM: $node_address Last Name: $last_nm
First Name: $first_name Phone: $related_pon Address: $addr_lin1";

}





} ## End GetInfo



**** End DSLLookup Module *****









**** Customer Config File Start *****

[AUP]

host=192.168.2.39

db=mydb

sid=mydb_prod

username=myname

password=mypass

oraport=1525

query= <<END

SELECT N.IP_ADDRESS,

P.NODE_ADDRESS,

SO.LAST_NM,

SO.FIRST_NAME,

SR.RELATED_PON,

AD.ADDR_LN1

FROM NETWORK_NODE N,

EQUIPMENT E,

MOUNTING_POSITION MP,

PORT_ADDRESS P,

SERVICE_REQUEST_CIRCUIT S,

SERV_ORD SO,

SERV_REQ SR,

EQUIPMENT E1,

CUST_ACCt_ADDR CAA,

ADDRESS AD

WHERE N.NETWORK_NODE_ID = E.NETWORK_NODE_ID

AND E.EQUIPMENT_ID = MP.EQUIPMENT_ID

AND E1.EQUIPMENT_ID = MP.EQUIPMENT_ID_2

AND E1.EQUIPMENT_ID = P.EQUIPMENT_ID

AND P.CIRCUIT_DESIGN_ID = S.CIRCUIT_DESIGN_ID

AND SO.DOCUMENT_NUMBER = S.DOCUMENT_NUMBER

AND SR.DOCUMENT_NUMBER = S.DOCUMENT_NUMBER

AND SR.CUST_ACCT_ID = CAA.CUST_ACCT_ID

AND CAA.ADDRESS_ID = AD.ADDRESS_ID

AND P.NODE_ADDRESS = $dslam

AND N.IP_ADDRESS = $ip_address

END



***** Customer Config File End ******





Chris Hood

Investigator Verizon Global Security Operations Center


Dave Gray

2005-08-02, 4:59 pm

On 7/31/05, christopher.l.hood@verizon.com
<christopher.l.hood@verizon.com> wrote:
> problem is that the variables in the config are not being translated into
> there actual values before they get used.


So you have a plaintext config file with variable names in it that you
want perl to interpolate at some point once the config data is loaded.

> my $sth =3D $dbh->prepare(qq{$QUERY});
> #print "DEBUG: $QUERY\n";


What does this debug print give you?

> query=3D <<END
> SELECT N.IP_ADDRESS,

[snip]
> AND CAA.ADDRESS_ID =3D AD.ADDRESS_ID
> AND P.NODE_ADDRESS =3D $dslam
> AND N.IP_ADDRESS =3D $ip_address
> END

Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2009 codecomments.com