#!/usr/bin/perl -wT use strict; $|++; use CGI ":all"; ## CONFIG my $SITE = "stonehenge.com"; my $MAXIMUM_HITS = 32; ## END CONFIG ## table of search engines my %ENGINES = ( AltaVista => sub { "+host:$SITE @_" }, HotBot => sub { "+domain:$SITE @_" }, Infoseek => sub { "+site:$SITE | @_" }, NorthernLight => sub { "URL:$SITE AND TEXT:\"@_\"" }, ); ## end table print header, start_html("Search this site"), h1("Search this site"); print hr, start_form(-method => 'GET'), table(Tr( td(submit("Search $SITE for")), td(textfield(-name => 'search_for')), td("using"), td(radio_group(-name => 'engine', -values => [sort keys %ENGINES], -columns => 1, )), )), end_form, hr; do_search() if param; print end_html; exit 0; ## subroutines sub do_search { return unless defined (my $search_for = param('search_for')); my $engine = param('engine'); if (defined $engine) { return unless $engine =~ /^(\w+)$/; $engine = $1; } else { $engine = "AltaVista"; } return unless defined (my $engine_sub = $ENGINES{$engine}); my $engine_search_for = $engine_sub->($search_for); require WWW::Search; my $search = WWW::Search->new($engine); $search->maximum_to_retrieve($MAXIMUM_HITS); $search->native_query(WWW::Search::escape_query($engine_search_for)); print table({-align => 'center'}, Tr(th("results for ", code(CGI::escapeHTML($search_for)), " from $engine on $SITE\n", )), (map { my $url = $_->url; Tr(td(a({-href => $url}, CGI::escapeHTML($url)))); } $search->results) ); }