This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Allow specifying a comparison function for Search::Dict::look().
[perl5.git] / lib / AutoLoader.pm
index af33ee8..4b2261e 100644 (file)
@@ -1,20 +1,22 @@
 package AutoLoader;
 
-use 5.005_64;
+use 5.6.0;
 our(@EXPORT, @EXPORT_OK, $VERSION);
 
 my $is_dosish;
 my $is_epoc;
 my $is_vms;
+my $is_macos;
 
 BEGIN {
     require Exporter;
     @EXPORT = @EXPORT = ();
     @EXPORT_OK = @EXPORT_OK = qw(AUTOLOAD);
-    $is_dosish = $^O eq 'dos' || $^O eq 'os2' || $^O eq 'MSWin32';
+    $is_dosish = $^O eq 'dos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare';
     $is_epoc = $^O eq 'epoc';
     $is_vms = $^O eq 'VMS';
-    $VERSION = '5.57';
+    $is_macos = $^O eq 'MacOS';
+    $VERSION = '5.58';
 }
 
 AUTOLOAD {
@@ -38,7 +40,12 @@ AUTOLOAD {
        my ($pkg,$func) = ($sub =~ /(.*)::([^:]+)$/);
        $pkg =~ s#::#/#g;
        if (defined($filename = $INC{"$pkg.pm"})) {
-           $filename =~ s#^(.*)$pkg\.pm\z#$1auto/$pkg/$func.al#s;
+           if ($is_macos) {
+               $pkg =~ tr#/#:#;
+               $filename =~ s#^(.*)$pkg\.pm\z#$1auto:$pkg:$func.al#s;
+           } else {
+               $filename =~ s#^(.*)$pkg\.pm\z#$1auto/$pkg/$func.al#s;
+           }
 
            # if the file exists, then make sure that it is a
            # a fully anchored path (i.e either '/usr/lib/auto/foo/bar.al',
@@ -50,18 +57,23 @@ AUTOLOAD {
                unless ($filename =~ m|^/|s) {
                    if ($is_dosish) {
                        unless ($filename =~ m{^([a-z]:)?[\\/]}is) {
-                            $filename = "./$filename";
+                            if ($^O ne 'NetWare') {
+                                       $filename = "./$filename";
+                               } else {
+                                       $filename = "$filename";
+                               }
                        }
                    }
                    elsif ($is_epoc) {
                        unless ($filename =~ m{^([a-z?]:)?[\\/]}is) {
                             $filename = "./$filename";
                        }
-                   }elsif ($is_vms) {
+                   }
+                   elsif ($is_vms) {
                        # XXX todo by VMSmiths
                        $filename = "./$filename";
                    }
-                   else {
+                   elsif (!$is_macos) {
                        $filename = "./$filename";
                    }
                }
@@ -77,6 +89,7 @@ AUTOLOAD {
        }
     }
     my $save = $@;
+    local $!; # Do not munge the value. 
     eval { local $SIG{__DIE__}; require $filename };
     if ($@) {
        if (substr($sub,-9) eq '::DESTROY') {
@@ -131,7 +144,13 @@ sub import {
     my $path = $INC{$calldir . '.pm'};
     if (defined($path)) {
        # Try absolute path name.
-       $path =~ s#^(.*)$calldir\.pm$#$1auto/$calldir/autosplit.ix#;
+       if ($is_macos) {
+           (my $malldir = $calldir) =~ tr#/#:#;
+           $path =~ s#^(.*)$malldir\.pm\z#$1auto:$malldir:autosplit.ix#s;
+       } else {
+           $path =~ s#^(.*)$calldir\.pm\z#$1auto/$calldir/autosplit.ix#;
+       }
+
        eval { require $path; };
        # If that failed, try relative path with normal @INC searching.
        if ($@) {