Dominique Dumont wrote :
On Friday 17 May 2013 06:44:46 Xavier wrote:
According to https://rt.cpan.org/Public/Bug/Display.html?id=62667 this
is not a bug and the Debian patch must be removed.
OTOH, UNIVERSAL doc mentions:
# but never do this!
$is_io= UNIVERSAL::isa($fd, IO::Handle);
$sub = UNIVERSAL::can($obj, print);
I think an alternative is suggested at the end of this man page:
Instead, use reftype from Scalar::Util for the first case:
use Scalar::Util 'reftype';
$yes = reftype( $h ) eq HASH;
reftype never returns a class name, it always returns the type of the
structure hidden behind an object.
Can you modify the patch and test that it works ?
If yes, we will be able to submit another patch to upstream.
Hi,
I've written it but the example continue to fail. So with a debug, I've
found something strange : $values contains a ref to a hashref. So I've
written a new patch
Xavier
Author: Ashish Shukla wahj...@members.fsf.org
Subject: use 'ref' rather than 'UNIVERSAL::isa'
Reviewed-by: Xavier Guimard x.guim...@free.fr
Last-Update: 2010-11-03
Bug: http://rt.cpan.org/Ticket/Display.html?id=62667
Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=602056
Last-Update: 2013-05-18
--- a/lib/SOAP/Lite.pm
+++ b/lib/SOAP/Lite.pm
@@ -3818,15 +3818,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;
+}
}
}
}