1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
Author: Ashish Shukla <wahjava@members.fsf.org>
Subject: use 'ref' rather than 'UNIVERSAL::isa'
Reviewed-by: Xavier Guimard <x.guimard@free.fr>
Bug: https://rt.cpan.org/Ticket/Display.html?id=62667
Bug-Debian: https://bugs.debian.org/602056
Last-Update: 2013-05-18
--- a/lib/SOAP/Lite.pm
+++ b/lib/SOAP/Lite.pm
@@ -3852,15 +3852,28 @@
my($value) = $_->value; # take first value
# fillup parameters
- UNIVERSAL::isa($_[$param] => 'SOAP::Data')
- ? $_[$param]->SOAP::Data::value($value)
- : UNIVERSAL::isa($_[$param] => 'ARRAY')
- ? (@{$_[$param]} = @$value)
- : UNIVERSAL::isa($_[$param] => 'HASH')
- ? (%{$_[$param]} = %$value)
- : UNIVERSAL::isa($_[$param] => 'SCALAR')
- ? (${$_[$param]} = $$value)
- : ($_[$param] = $value)
+ use Scalar::Util 'reftype';
+ if ( reftype( $_[$param] ) ) {
+ if ( reftype( $_[$param] ) eq 'SCALAR' ) {
+ ${ $_[$param] } = $$value;
+ }
+ elsif ( reftype( $_[$param] ) eq 'ARRAY' ) {
+ @{ $_[$param] } = @$value;
+ }
+ elsif ( reftype( $_[$param] ) eq 'HASH' ) {
+ if ( eval { $_[$param]->isa('SOAP::Data') } ) {
+ $_[$param]->SOAP::Data::value($value);
+ }
+ elsif ( reftype($value) eq 'REF' ) {
+ %{ $_[$param] } = %$$value;
+ }
+ else { %{ $_[$param] } = %$value; }
+ }
+ else { $_[$param] = $value; }
+ }
+ else {
+ $_[$param] = $value;
+ }
}
}
}
|