Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:
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'} && $Searc +hResults{'pageno'} != 0) || + ($SearchResults{'count'} == $Sear +chResults{'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 (<TOP>) { print $_; } print <<EOF; <script language="JavaScript"> <!-- function MM_openBrWindow(theURL,winName,features) { / +/v2.0 window.open(theURL,winName,features); } // --> </script> <!-- --> </header> <body bgcolor="#000000"> <center> <h2><b><font color="#FFFF00">Search Results</font></b></h2 +> </center><br><br> <font size="2" color="#FFFF00" face="arial,helvetica,sans- +serif">Searchterm is <b>$SearchResults{'keyterm'}</b></font><br> <p> <dl> EOF } sub HtmlMiddle { $SearchResults = $_ if $_; for ($index = $SearchResults{'start'}; $index <= $SearchResults{'e +nd'}; $index++) { $printHypertextLink = qq(<dd><h3><font color="#FFFFFF"><a hr +ef="http://eclipse.vcix.com/cgi-bin/); $printHypertextLink .= qq(Starlog.storefront/EN/product/$Sea +rchResults[$index]{'buynow'}" ); $printHypertextLink .= qq(target=_blank>$SearchResults[$inde +x]{'magazinetitle'} ); $printHypertextLink .= qq(#$SearchResults[$index]{'issueno'} + ); if ($SearchResults[$index]{'startpage'} == $SearchResults[$i +ndex]{'endpage'}) { $printHypertextLink .= qq(page(s): $SearchResults[$index +]{'startpage'}</a></font></h3><br>); } else { $printHypertextLink .= qq(page(s): $SearchResults[$index +]{'startpage'}-); $printHypertextLink .= qq($SearchResults[$index]{'endpag +e'}</a></font></h3><br>); } if ($SearchResults[$index]{'searchterm'} eq $temp) { print $printHypertextLink; } else { print "<dt><h2><b><font color=\"maroon\">$SearchResults[ +$index]{'searchterm'}</font></b></h2>"; print $printHypertextLink; } $temp = $SearchResults[$index]{'searchterm'}; } return($SearchResults[$index - 1]{'index'}); } sub HtmlEnd { ($SearchResults, $Next, $Previous) = @_ if @_; $PreviousImage = "<input type=\"submit\" name=\"Action\" value=\ +"prev\">" if ($Previous); $NextImage = "<input type=\"submit\" name=\"Action\" value=\"nex +t\">" if ($Next); print <<EOF; </dl> <br> <br> <hr width="100%" align="center"> <form method="POST" action="SearchEngine.pl"> <input type="hidden" name="Keyterm" value=$SearchResults{'ke +yterm'}> <input type="hidden" name="Lastcount" value=$SearchResults{' +lastcount'}> <input type="hidden" name="Fieldname" value=$SearchResults{' +fieldname'}> <table width="100%" border="0" align="center"> <tr align="center" valign="middle"> <td width="5%">$PreviousImage</td> <td width="*"><font face="Arial, Hfelvetica, sans-serif +" color="#FFFFFF">There are $SearchResults{'count'} matching titles.< +br /> Displaying matches: $SearchResults{'start'} - $Sea +rchResults{'end'}</font></td> <td width="5%">$NextImage</td> </tr> </table> <hr width="100%" align="center"> </center> </form> <center> EOF $SearchResults{'temppgno'} = ($SearchResults{'pageno'} != 0) ? $ +SearchResults{'pageno'} : int($SearchResults{'lastcount'}/10); for ($i = 1; $i <= $SearchResults{'pages'}; $i++) { $Link = qq(<a href="SearchEngine.pl?); $Link .= qq(Keyterm=$SearchResults{'keyterm'}&Lastcount=$Se +archResults{'lastcount'}&); $Link .= qq(Fieldname=$SearchResults{'fieldname'}&Page=$i>) +; $Link .= qq(<font face="Arial, Hfelvetica, sans-serif" colo +r="yellow">[$i]</font></a>); if ($i%10 == 1) { print "<br />\n"; } if ($i == int($SearchResults{'temppgno'})) { print qq(<font face="Arial, Hfelvetica, sans-serif" col +or="white">[$i]</font>); } else { print $Link; } print " "; } open (BOTTOM, "front_table_bottom.asp"); while (<BOTTOM>) { print $_; } exit; } sub ErrorPage { print "Content-type: text/html\n\n"; open (TOP, "front_table_top.asp"); while (<TOP>) { print $_; } print "<h2>No Match Found</h2>"; open (BOTTOM, "front_table_bottom.asp"); while (<BOTTOM>) { print $_; } exit; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
RE: Help required to improve code
by Petruchio (Vicar) on Oct 05, 2000 at 16:48 UTC | |
|
Re: Help required to improve code
by Jouke (Curate) on Oct 05, 2000 at 09:45 UTC | |
|
Re (tilly) 1: Help required to improve code
by tilly (Archbishop) on Oct 05, 2000 at 15:06 UTC | |
|
Re: Help required to improve code
by PotPieMan (Hermit) on Oct 05, 2000 at 17:09 UTC | |
|
Re: Help required to improve code
by cadfael (Friar) on Oct 05, 2000 at 17:42 UTC | |
|
Re: Help required to improve code
by Anonymous Monk on Oct 05, 2000 at 10:28 UTC | |
|
Re: Help required to improve code
by AgentM (Curate) on Oct 05, 2000 at 19:02 UTC |