This is a code for a search engine. I was wondering if this code can be improved for better performance. Can anyone suggest where and how I can improve this code? Thanks in Advance. #!/usr/bin/perl require "konnect1.pl"; require "cgilib.pl"; &readParse(*dict); $index = 0; %SearchResults = ""; $SearchResults{'keyterm'} = $dict{'Searchphrase'} || $dict{'Keyterm'}; $SearchResults{'fieldname'} = $dict{'Fieldname'}; $SearchResults{'lastcount'} = $dict{'Lastcount'} || 0; $SearchResults{'pageno'} = $dict{'Page'} || 0; ErrorPage() if ($SearchResults{'keyterm'} !~ /(\w+)/); # Retrieve the results based on keyterm $Query = qq(Select id, searchterm, magazinetitle, issueno, ); $Query .= qq(startpage, endpage, buynow ); $Query .= qq(FROM Database); $Query .= qq(WHERE ); if ($SearchResults{'fieldname'} eq "Searchterm") { $Query .= qq(searchterm like "%$SearchResults{'keyterm'}%" ); } else { $Query .= qq(issueno = $SearchResults{'keyterm'} ); } $Query .= qq(ORDER BY searchterm, issueno); $sth = $dbh -> prepare($Query); $sth -> execute; while(@results = $sth -> fetchrow_array) { $index++; $SearchResults[$index]{'id'} = $results[0]; $SearchResults[$index]{'searchterm'} = $results[1]; $SearchResults[$index]{'magazinetitle'} = $results[2]; $SearchResults[$index]{'issueno'} = $results[3]; $SearchResults[$index]{'startpage'} = $results[4]; $SearchResults[$index]{'endpage'} = $results[5]; $SearchResults[$index]{'buynow'} = $results[6]; $SearchResults[$index]{'index'} = $index; $SearchResults{'count'} += 1; } $sth -> finish; ErrorPage() if (!$SearchResults[1]{'id'}); $SearchResults{'quotient'} = int($SearchResults{'count'}/10); $SearchResults{'pages'} = $SearchResults{'quotient'} + 1; if (($SearchResults{'pageno'} != $SearchResults{'pages'} && $SearchResults{'pageno'} != 0) || ($SearchResults{'count'} == $SearchResults{'lastcount'})) { $SearchResults{'end'} = ($SearchResults{'pageno'} != 0) ? $SearchResults{'pageno'}*10 : $SearchResults{'quotient'}*10; $SearchResults{'start'} = $SearchResults{'end'} - 9; } elsif ($dict{'Action'} eq "prev") { $SearchResults{'end'} = $SearchResults{'lastcount'} - 10; $SearchResults{'start'} = $SearchResults{'end'} - 9; } elsif (($SearchResults{'pageno'} == $SearchResults{'pages'}) || (($SearchResults{'count'} - $SearchResults{'lastcount'}) < 10)) { $SearchResults{'start'} = ($SearchResults{'pageno'} != 0) ? ($SearchResults{'quotient'}*10)+1 : $SearchResults{'lastcount'}+1; $SearchResults{'end'} = $SearchResults{'count'}; } else #COMMENT: ($dict{'Action'} eq "next" || $dict{'Action'} eq "") { $SearchResults{'start'} = $SearchResults{'lastcount'} + 1; $SearchResults{'end'} = $SearchResults{'lastcount'} + 10; } HtmlBegin($SearchResults); $SearchResults{'lastcount'} = HtmlMiddle($SearchResults); if ($SearchResults{'count'} < 10) { HtmlEnd($SearchResults, $Next = 0, $Previous = 0); } elsif ($SearchResults{'count'} > 10 && $SearchResults{'lastcount'} == 10) { HtmlEnd($SearchResults, $Next = 1, $Previous = 0); } elsif ($SearchResults{'count'} == $SearchResults{'lastcount'}) { HtmlEnd($SearchResults, $Next = 0, $Previous = 1); } else { HtmlEnd($SearchResults, $Next = 1, $Previous = 1); } #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~S U B R O U T I N E S~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub HtmlBegin { $SearchResults = $_ if $_; print "Content-type: text/html\n\n"; open (TOP, "front_table_top.asp"); while () { print $_; } print <

Search Results



Searchterm is $SearchResults{'keyterm'}

EOF } sub HtmlMiddle { $SearchResults = $_ if $_; for ($index = $SearchResults{'start'}; $index <= $SearchResults{'end'}; $index++) { $printHypertextLink = qq(

$SearchResults[$index]{'magazinetitle'} ); $printHypertextLink .= qq(#$SearchResults[$index]{'issueno'} ); if ($SearchResults[$index]{'startpage'} == $SearchResults[$index]{'endpage'}) { $printHypertextLink .= qq(page(s): $SearchResults[$index]{'startpage'}


); } else { $printHypertextLink .= qq(page(s): $SearchResults[$index]{'startpage'}-); $printHypertextLink .= qq($SearchResults[$index]{'endpage'}
); } if ($SearchResults[$index]{'searchterm'} eq $temp) { print $printHypertextLink; } else { print "

$SearchResults[$index]{'searchterm'}

"; print $printHypertextLink; } $temp = $SearchResults[$index]{'searchterm'}; } return($SearchResults[$index - 1]{'index'}); } sub HtmlEnd { ($SearchResults, $Next, $Previous) = @_ if @_; $PreviousImage = "" if ($Previous); $NextImage = "" if ($Next); print <


$PreviousImage There are $SearchResults{'count'} matching titles.
Displaying matches: $SearchResults{'start'} - $SearchResults{'end'}
$NextImage

EOF $SearchResults{'temppgno'} = ($SearchResults{'pageno'} != 0) ? $SearchResults{'pageno'} : int($SearchResults{'lastcount'}/10); for ($i = 1; $i <= $SearchResults{'pages'}; $i++) { $Link = qq([$i]); if ($i%10 == 1) { print "
\n"; } if ($i == int($SearchResults{'temppgno'})) { print qq([$i]); } else { print $Link; } print "  "; } open (BOTTOM, "front_table_bottom.asp"); while () { print $_; } exit; } sub ErrorPage { print "Content-type: text/html\n\n"; open (TOP, "front_table_top.asp"); while () { print $_; } print "

No Match Found

"; open (BOTTOM, "front_table_bottom.asp"); while () { print $_; } exit; }