something like (untested)
...
my $token = SOAP::Data->name('token' => 'value')->attr({xmlns =>
+'ns1'});
my $merchantId = SOAP::Data->name('merchantId' => 'value')->attr({xmln
+s => 'ns1'});
my %request = (
'Amount' => 'value',
'CurrencyCode' => 'value',
'CustomerEmail' => 'value',
#....
);
my @request_values = ();
foreach my $r (keys %request) {
push @request_values,
SOAP::Data->name($r => $request{$r})->attr({xmlns => 'ns2'});
}
my $request = (
SOAP::Data->name('request' => \SOAP::Data->value(
@request_values
)
)->attr({xmlns => 'ns1'})
);
my @setup_values = ();
push @setup_values, $token, $merchantId, $request;
my $setup = (
SOAP::Data->name('Setup' => \SOAP::Data->value(
@setup_values
)
)->attr({xmlns => 'ns1'})
);
# pass $setup as a param to the method to be called
...