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