The virtual PM is build via "generate_stub(/usr/lib/perl5/site_perl/5.8.8/SOAP/Lite.pm:3264" foreach (@{$services->{$service}{parameters}}) { # This is a workaround for https://sourceforge.net/tracker/index.php?func=detail&aid=2001592&group_id=66000&atid=513017 next unless ref $_; $self->{'_stub'} .= " SOAP::Data->new(name => '".$_->name."', type => '".$_->type."', attr => {"; $self->{'_stub'} .= do { my %attr = %{$_->attr}; join(', ', map {"'$_' => '$attr{$_}'"} grep {/^xmlns:(?!-)/} keys %attr); }; $self->{'_stub'} .= "}),\n"; } Builds: SOAP::Schema::generate_stub(/usr/lib/perl5/site_perl/5.8.8/SOAP/Lite.pm:3270): 3270: join(', ', map {"'$_' => '$attr{$_}'"} DB<136> p $self->{'_stub'} package HD_Netcool_v1Service; # Generated by SOAP::Lite (v0.712) for Perl -- soaplite.com # Copyright (C) 2000-2006 Paul Kulchenko, Byrne Reese # -- generated at [Thu Apr 7 10:57:38 2011] # -- generated from http://stsnymidrem2dr/arsys/WSDL/public/devsupport/HD_Netcool_v1 my %methods = ( OpSet => { endpoint => 'http://stsnymidrem2dr/arsys/services/ARService?server=devsupport&webService=HD_Netcool_v1', soapaction => 'urn:HD_Netcool_v1/OpSet', namespace => 'urn:HD_Netcool_v1', parameters => [ SOAP::Data->new(name => 'OpSet', type => 's0:SetInputMap', attr => { DB<163> p Data::Dumper->Dumper($services->{$service}{parameters}[0]{_attr}) $VAR1 = 'Data::Dumper'; $VAR2 = { 'name' => 'OpGetList', 'type' => 's0:GetListInputMap' };