SOAP-Lite.pm.diff   [plain text]


--- SOAP-Lite/lib/SOAP/Lite.pm	(.../tags/CPANInternal-97)	(revision 22689)
+++ SOAP-Lite/lib/SOAP/Lite.pm	(.../trunk)	(revision 22689)
@@ -493,6 +493,7 @@
 # ======================================================================
 
 package SOAP::Transport;
+use Class::Inspector;
 
 use vars qw($AUTOLOAD @ISA);
 
@@ -521,7 +522,7 @@
 
   (my $protocol_class = "${class}::$protocol") =~ s/-/_/g;
   no strict 'refs';
-  unless (defined %{"$protocol_class\::Client::"} && UNIVERSAL::can("$protocol_class\::Client" => 'new')) {
+  unless (Class::Inspector->loaded("$protocol_class\::Client::") && UNIVERSAL::can("$protocol_class\::Client" => 'new')) {
     eval "require $protocol_class";
     die "Unsupported protocol '$protocol'\n" if $@ =~ m!^Can\'t locate SOAP/Transport/!;
     die if $@;
@@ -2497,7 +2498,7 @@
 # The following patch does not work for packages defined within a BEGIN block
 #  unless (exists($INC{join '/', split /::/, $class.'.pm'})) {
 # Combination of 0.60 and patch:
-  unless (defined(%{"${class}::"}) || exists($INC{join '/', split /::/, $class.'.pm'})) {
+  unless (($class eq 'main') || $class->can($method_name) || exists($INC{join '/', split /::/, $class.'.pm'})) {
     # allow all for static and only specified path for dynamic bindings
     local @INC = (($static ? @INC : ()), grep {!ref && m![/\\.]!} $self->dispatch_to);
     eval 'local $^W; ' . "require $class";