package Square; use base 'CGI::Application'; sub setup { my ($self) = @_; $ENV{'PATH'} = ''; my @pi = split(m{/}, $self->query->path_info()); $self->start_mode(($pi[1] eq 'RPC2') ? 'RPC2' : 'view'); $self->run_modes( 'view' => 'view', 'RPC2' => 'rpc2', ); } sub view { my ($self) = @_; my $number = $self->query->param('number'); my $template = $self->load_tmpl('view'); $template->param(NUMBER => $number, SQUARE => square($number)->{square}, ); return $template->output; } sub rpc2 { my ($self) = @_; require Frontier::RPC2; my $rpc = Frontier::RPC2->new(); my $response = $rpc->serve($self->query->param('POSTDATA'), { 'sample.square' => \&square, }, ); $self->header_props( -type => 'text/xml', charset => 'UTF-8', ); return $response; } sub square { my ($x) = @_; return {square => ($x ** 2)}; } 1;