3 # $Header: /home/cvsroot/simpleserver/samples/render-search.pl,v 1.2 2002-03-05 12:03:26 mike Exp $
5 # Trivial example of programming using the "augmented classes"
6 # paradigm. This tiny SimpleServer-based Z39.50 server logs Type-1
7 # searches in human-readable form. It works by augmenting existing
8 # classes (the RPN-node types) with additional methods -- something
9 # that most OO languages would definitely not allow, but Perl does.
10 # And it's sort of cute.
12 use Net::Z3950::SimpleServer;
15 my $handler = Net::Z3950::SimpleServer->new(SEARCH => \&search_handler,
16 FETCH => \&fetch_handler);
17 $handler->launch_server("render-search.pl", @ARGV);
21 print "got search: ", $args->{RPN}->{query}->render(), "\n";
24 sub fetch_handler {} # no-op
27 package Net::Z3950::RPN::Term;
30 return '"' . $self->{term} . '"';
33 package Net::Z3950::RPN::And;
36 return '(' . $self->[0]->render() . ' AND ' .
37 $self->[1]->render() . ')';
40 package Net::Z3950::RPN::Or;
43 return '(' . $self->[0]->render() . ' OR ' .
44 $self->[1]->render() . ')';
47 package Net::Z3950::RPN::AndNot;
50 return '(' . $self->[0]->render() . ' ANDNOT ' .
51 $self->[1]->render() . ')';