/usr/share/perl5/inc/latest/private.pm is in libmodule-build-perl 0.420400-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | package inc::latest::private;
use if $] >= 5.019, 'deprecate';
use strict;
use vars qw($VERSION);
$VERSION = '0.4204';
$VERSION = eval $VERSION;
use File::Spec;
# must ultimately "goto" the import routine of the module to be loaded
# so that the calling package is correct when $mod->import() runs.
sub import {
my ($package, $mod, @args) = @_;
my $file = $package->_mod2path($mod);
if ($INC{$file}) {
# Already loaded, but let _load_module handle import args
goto \&_load_module;
}
# A bundled copy must be present
my ($bundled, $bundled_dir) = $package->_search_bundled($file)
or die "No bundled copy of $mod found";
my $from_inc = $package->_search_INC($file);
unless ($from_inc) {
# Only bundled is available
unshift(@INC, $bundled_dir);
goto \&_load_module;
}
if (_version($from_inc) >= _version($bundled)) {
# Ignore the bundled copy
goto \&_load_module;
}
# Load the bundled copy
unshift(@INC, $bundled_dir);
goto \&_load_module;
}
sub _version {
require ExtUtils::MakeMaker;
return ExtUtils::MM->parse_version(shift);
}
# use "goto" for import to preserve caller
sub _load_module {
my $package = shift; # remaining @_ is ready for goto
my ($mod, @args) = @_;
eval "require $mod; 1" or die $@;
if ( my $import = $mod->can('import') ) {
goto $import;
}
return 1;
}
sub _search_bundled {
my ($self, $file) = @_;
my $mypath = 'inc';
opendir my $DH, $mypath or die "Can't open directory $mypath: $!";
while (defined(my $e = readdir $DH)) {
next unless $e =~ /^inc_/;
my $try = File::Spec->catfile($mypath, $e, $file);
return($try, File::Spec->catdir($mypath, $e)) if -e $try;
}
return;
}
# Look for the given path in @INC.
sub _search_INC {
# TODO: doesn't handle coderefs or arrayrefs or objects in @INC, but
# it probably should
my ($self, $file) = @_;
foreach my $dir (@INC) {
next if ref $dir;
my $try = File::Spec->catfile($dir, $file);
return $try if -e $try;
}
return;
}
# Translate a module name into a directory/file.pm to search for in @INC
sub _mod2path {
my ($self, $mod) = @_;
my @parts = split /::/, $mod;
$parts[-1] .= '.pm';
return $parts[0] if @parts == 1;
return File::Spec->catfile(@parts);
}
1;
|