my $si = new ServerInfo;
$si->configure;
print "This is one of the variables: $si->{'VARIABLE_X'}";
####
# ======================================================================
# ServerInfo.pm
# Server Information object
#
# Copyright (C) 2001 Art C. Pacheco (Synapse0) All rights reserved.
#
# ========================================================================
package ServerInfo;
use strict;
# ======================================================================
# /* ------------------------------------------------------------------- */
sub new {
my $class = shift;
my $self = {};
bless($self, $class);
# Grab the name of the calling executable.
my $x = $0;
$x =~ s#.+/##;
$self->script("$x?");
return $self;
}
# ======================================================================
# script(scalar)
# sets/returns name of script
# /* ------------------------------------------------------------------- */
sub script {
my $self = shift;
$self->{_script} = shift if @_;
return $self->{_script};
}
# ======================================================================
# assign(KEY, VALUE[, VALUE, VALUE, ...])
# assigns key->value pairs to ServerInfo hash
# /* ------------------------------------------------------------------- */
sub assign {
my $self = shift;
my $field = shift;
my $item;
$field = "_$field";
if (@_ > 1) {
# we were pushed an array
while (@_) {
$item = shift;
push(@{$self->{$field}}, $item);
}
}
else {
# we were pushed a single item
$item = shift;
$self->{$field} = $item;
}
}
# ======================================================================
# configure()
# reads in configuration file ( ./_config.inf ) and assign()s the
# key->value pairs specified
# /* ------------------------------------------------------------------- */
sub configure {
my $self = shift;
my($cfg_var, $val) = ('','');
if (open(FILE, "< _config.inf")) {
while () {
# skip anything that's not a directive, untaint
next unless my($line) = ($_ =~ /^(\w.*)/);
chomp($line);
($cfg_var, $val) = split(/\s+/, $line, 2);
$val =~ s/{(.*?)}/$self->get($1)/eg; # resolve any {vars}
if ($val =~ /^\@ (.*)/) {
# $val holds a list
$self->assign($cfg_var, split(/\s+/, $1));
}
else {
$self->assign($cfg_var, $val);
}
}
close(FILE);
}
else {
# do something about open error
print "ACK!! NOOOOOOOOOOOO : $!\n\n\n\n";
}
# debug
$self->assign('DEBUG', -e "$self->{_BaseDir}/DEBUG" ? 1 : 0);
}
# ======================================================================
# get(scalar)
# retrieves a value (scalar or list) assigned by assign()
# /* ------------------------------------------------------------------- */
sub get {
my $self = shift;
my $key = shift;
return $self->{"_$key"};
}
# /* ------------------------------------------------------------------- */
1;
__END__
=head1 NAME
ServerInfo - Server information object
=head1 SYNOPSIS
# create a new server object and execute configuration
use _Mod::ServerInfo;
my $si = new ServerInfo;
$si->configure;
# access a configuration variable
# used to be $email_link = $si->{AdminEmailLink}
# but now it's safer
$email_link = $si->get('AdminEmailLink');
=head1 DESCRIPTION
ServerInfo encapsulates configuration information obtained from the _config
file in the root directory.
=head2 OBJECT METHODS
=item $si = ServerInfo->new()
Creates a new ServerInfo object. The constructor initializes the
script() method described next.
=item $si->script([scalar scriptname])
If given an argument, script() will set the name of the current script.
If called without an argument, script() will return the script name.
script() is initialized when a new ServerInfo object is created.
=item $si->assign(scalar key, scalar/list value)
Takes two (or more for an list) arguments and creates a hash,
assigning the value(s) to the key.
=over 4
=item
example:
$si->assign('KEY', 'VALUE'[, 'VALUE', 'VALUE', ...])
=back
=item $si->configure()
Configuration method. Reads in data from the configuration file
B<_config.inf> which lives in the same directory as the ServerInfo module.
configure() reads in the data and splits the info at the first whitespace,
using the lefthand data for the key, and the righthand data for the value
(which can be a list). It uses assign() to place the data into a hash,
accessible by the ServerInfo object.
=item $si->get(scalar key)
Retrieval method. Returns a value assigned by the assign() method
=head1 AUTHOR INFORMATION
Copyright 2000-2001, Art Pacheco. All rights reserved.
=cut
##
##
BaseDir /home/tech/htdocs/arena
BaseURL http://dev/~tech/arena
#
# Intro script (index script)
#
IntroURL {BaseURL}/arenaintro.cgi?
IntroEXE {BaseDir}/arenaintro.cgi
#
# Some Default Colors
# DefBody: bgcolor text link vlink alink
DefBody @ #000000 #99c68e #99c68e #99c68e #bcc7c7
# Table background color
TableBgColor #333333
# Hilighted text
hilight #c9e6be
# bold text
bold #c7aa7d
# undefined color
UndefColor #555555
#
# Battle colors
# Char basic attack color
ChBasAtt #559955
OppBasAtt #00aaaa
ChAttHit #dddd55
OppAttHit #dd0055
ChMiss #77aa77
OppMiss #22bb99
ChArmAbsorb #658978
OppArmAbsorb #008888
ChSpecAtt #bbbb33
OppSpecAtt #bb0033
ChCounter #88cc88
OppCounter #33dddd