Log in

View Full Version : Perl require config


provocating
03-11-2012, 04:27 PM
I am doing some Perl scripts that are requiring me to have MySQL access, obviously I do not want my login and password information in these scripts. I would rather have them outside of the script. Is there something in the emulator that would interfere with this ? Using a perl require seems to work fine outside of the emulator, I can print out variable results at the command line. Within the emulator the variables do not seem to import properly.

Something simple like

config.pl

use DBI;
$db_database='peq';


and script.pl


#!/usr/bin/perl

require 'config.pl';

sub EVENT_SAY
{
if($text=~/Hail/i) {
quest::shout('db name ' . $db_database);
}
}


I would think that would work, now if I do a print after the require line, like print $db_database, it works all day long.

c0ncrete
03-13-2012, 04:41 PM
something like this will work from the plugins directory:


use XML::Simple;
use DBI;
use DBD::mysql;

sub RunQuery {

my $query = shift;

# Read database config info from xml file.
# NOTE: First line MUST read: <?xml version="1.0" ?>
my $xml = new XML::Simple;
my $dat = $xml->XMLin("../eqemu_config.xml");
my $dbHost = $dat->{database}{host};
my $dbPort = $dat->{database}{port};
my $dbUser = $dat->{database}{username};
my $dbPass = $dat->{database}{password};
my $dbData = $dat->{database}{db};

# Connect to the database.
my $dsn = "dbi:mysql:$dbData:$dbHost";
my $dbh = DBI->connect($dsn, $dbUser, $dbPass);

# Run query and return result set.
my $sth = $dbh->prepare($query);
$sth->execute;
return $sth->fetchrow_array();

}

1;