Fix overload index mismatch in overloading logic.
[p5sagit/p5-mst-13.2.git] / lib / AutoLoader.pm
index 215a9ff..0129002 100644 (file)
@@ -15,7 +15,7 @@ BEGIN {
     $is_epoc = $^O eq 'epoc';
     $is_vms = $^O eq 'VMS';
     $is_macos = $^O eq 'MacOS';
-    $VERSION = '5.64';
+    $VERSION = '5.67';
 }
 
 AUTOLOAD {
@@ -51,21 +51,6 @@ AUTOLOAD {
     goto &$sub;
 }
 
-sub can {
-    my ($self, $method) = @_;
-
-    my $parent          = $self->SUPER::can( $method );
-    return $parent if $parent;
-
-    my $package         = ref( $self ) || $self;
-    my $filename        = AutoLoader::find_filename( $package . '::' . $method );
-    local $@;
-    return unless eval { require $filename };
-
-    no strict 'refs';
-    return \&{ $package . '::' . $method };
-}
-
 sub find_filename {
     my $sub = shift;
     my $filename;
@@ -152,7 +137,6 @@ sub import {
        if ( @_ and $_[0] =~ /^&?AUTOLOAD$/ ) {
            no strict 'refs';
            *{ $callpkg . '::AUTOLOAD' } = \&AUTOLOAD;
-           *{ $callpkg . '::can'      } = \&can;
        }
     }
 
@@ -171,17 +155,20 @@ sub import {
     (my $calldir = $callpkg) =~ s#::#/#g;
     my $path = $INC{$calldir . '.pm'};
     if (defined($path)) {
-       # Try absolute path name.
+       # Try absolute path name, but only eval it if the
+        # transformation from module path to autosplit.ix path
+        # succeeded!
+       my $replaced_okay;
        if ($is_macos) {
            (my $malldir = $calldir) =~ tr#/#:#;
-           $path =~ s#^(.*)$malldir\.pm\z#$1auto:$malldir:autosplit.ix#s;
+           $replaced_okay = ($path =~ s#^(.*)$malldir\.pm\z#$1auto:$malldir:autosplit.ix#s);
        } else {
-           $path =~ s#^(.*)$calldir\.pm\z#$1auto/$calldir/autosplit.ix#;
+           $replaced_okay = ($path =~ s#^(.*)$calldir\.pm\z#$1auto/$calldir/autosplit.ix#);
        }
 
-       eval { require $path; };
+       eval { require $path; } if $replaced_okay;
        # If that failed, try relative path with normal @INC searching.
-       if ($@) {
+       if (!$replaced_okay or $@) {
            $path ="auto/$calldir/autosplit.ix";
            eval { require $path; };
        }
@@ -198,7 +185,7 @@ sub unimport {
 
     no strict 'refs';
 
-    for my $exported (qw( AUTOLOAD can )) {
+    for my $exported (qw( AUTOLOAD )) {
        my $symname = $callpkg . '::' . $exported;
        undef *{ $symname } if \&{ $symname } == \&{ $exported };
        *{ $symname } = \&{ $symname };
@@ -389,7 +376,8 @@ can benefit from bug fixes.
 This package has the same copyright and license as the perl core:
 
              Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-        2000, 2001, 2002, 2003, 2004, 2005, 2006 by Larry Wall and others
+        2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+        by Larry Wall and others
     
                            All rights reserved.