The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w
#!d:\perl\bin\perl.exe 

# -- SOAP::Lite -- soaplite.com -- Copyright (C) 2001 Paul Kulchenko --

# example for Microsoft's TerraServer http://terraserver.microsoft.net/
# thanks to Ivan R. Judson <judson@mcs.anl.gov> for his help

use SOAP::Lite;

# terraserver doesn't like charset in content-type
$SOAP::Constants::DO_NOT_USE_CHARSET = 1;

my $terra = SOAP::Lite
  ->proxy('http://terraserver.microsoft.net/TerraService.asmx')
  ->on_action(sub { join '/', 'http://terraservice.net/terraserver', $_[1] })
  ->uri('http://tempuri.org/')
;

my $response = $terra->GetTheme(SOAP::Data->name(theme => 'Photo'));

if ($response->fault) {
  die $response->faultstring;
} else {
  my %result = %{$response->result};
  print map("$_: @{[$result{$_} || '']}\n", keys %result), "\n";
}

my $method = SOAP::Data->name('GetPlaceList')
  ->attr({xmlns => 'http://tempuri.org/'});

my @params = (
  SOAP::Data->name(placeName => 'Chicago'),
  SOAP::Data->name(MaxItems => 10),
  SOAP::Data->name(imagePresence => 'true')
);

$response = $terra->call($method => @params);

if ($response->fault) {
  print $response->faultcode, " ", $response->faultstring, "\n";
} else {
  foreach ($response->valueof('//PlaceFacts')) {
    my %result = %{$_->{Place}};
    print map("$_: $result{$_}\n", keys %result), "\n";
  }
}