Client

use warnings;
use strict;

use SOAP::Lite; ##  +trace => 'debug';
use Getopt::Long;
use Data::Dumper;

my $opt  = {};

GetOptions($opt,
        'server=s',
        'command=s',
        'urn=s',
);

my $NS     = "urn:". ($opt->{urn} || "SOAPServer::Handler");
my $HOST = 'http://'.$opt->{server};

my $soap = SOAP::Lite
  ->readable(1)
  ->uri($NS)
  ->proxy($HOST);

my $soapd = new SOAP::Data->type(hash => $opt);

my $som = $soap->command($soapd);

#print Dumper $som;
print Dumper $som->result;

Server

httpd.conf

Listen 9876
<VirtualHost _default_:9876>
  ServerName     SOAP
  ErrorLog       /var/log/apache2/soap_error.log  ## funktioniert nur richtig wenn apache richtig kompiliert
  TransferLog    /var/log/apache2/soap_transfer.log
  <Location /soap>
        SetHandler perl-script
        PerlHandler Apache2::SOAP
        PerlSetVar dispatch_to SOAPServer::Handler
  </Location>

</VirtualHost>
package SOAPServer::Handler;

use SOAP::Lite;

sub command {
  my ($class, $soap_hash) = @_;
  $data = SOAP::Data->new;
  $data->type(hash => {result => 'wir gratinieren'});
  print STDERR "blafasel\n";
  return $data;
}

1;