hello list

i have got a program which, if it meets certain strings (a tag) in a
content variable will do a lot of database calls.

my (main) question is wheter it is worthwhile to create a txt-file of
the relevant data on each line and then build a hash based on this file.
this hash would probably never have more than a few hundred elements. my
aiming is partly to unstress the database server but primarily to
speeden things up as it is concerning a heavily visited website.

i have enclosed a script containg 2 versions of a program that should do
both of these.
i am curently unable to test things in their proper enviroment but
perhaps someone have had a similar situation and can suggest a solution.

thnaks
allan


#!perl -w

keys(my %tagHash) = 10000; #preallocate size
my $content  = "mixed content <TAG ID=1>\nmore stuff <TAG ID=2>\n\n";
#several of several more lines like these

my $hashResponse = hashVersion($content);
print $hashResponse; #hash version

my $dbResponse = dbVersion($content);
print $dbResponse; #database version

############hash vesion subs############

sub hashVersion {
        my $output = $_[0];
        open (FILE, "dbm.txt"); #database dump-file; lines like <TAG ID=1>:123,00
        local $/; #slurp
        my $tables =  <FILE>;
        close(FILE);
        GetTagHash($tables); 
        if ($output =~ /<TAG[^>]+id=\d+>/i) { #immidiate look thru content for TAGS
                while ((my $tag, my $tagValue) =  each %tagHash) { #loop thru hash 
elements
                        $output =~ s/$tag/$tagValue/ig; #replace
                }       
        }
        return  $output; 
}

sub GetTagHash {
        ($_, my $costumer) = @_;
        while (/^(<TAG[^>]+id=\d+>):([^:]+$)/igm) {
                $tagHash{$1} = $2; #example: key:<TAG id=1>; value=123,00
        }
        return %tagHash;
}

############database vesion subs############

sub dbVersion {
        $_ = $_[0];
        while (/(<TAG[^>]+id=(\d+)>)/ig) {
                my $tag = $1;
                my $id = $2;
                my $value =  getValue($id); #function that calls a database, this will
happen a lot of times
                s/$tag/$value/ig; #replace
        }
        return $_;
}
sub getValue{
        #purely illustrating example; this would be some sql essentially just
returning a value
        my $input = $_[0];
        my $out;
        if ($input==1) {$out = "123.00"}
        elsif ($input==2) {$out = "456.00"}
        else  {$out = "789.00"}
        return $out     
}

Reply via email to