diff /usr/lib/x86_64-linux-gnu/perl/5.26.1/Config.pm /usr/lib/x86_64-linux-gnu/perl-base/Config.pm >2.txt
diff /usr/lib/x86_64-linux-gnu/perl/5.26.1/Config.pm /usr/lib/x86_64-linux-gnu/perl/cross-config-5.26.1/Config.pm >3.txt
diff /usr/lib/x86_64-linux-gnu/perl-base/Config.pm /usr/lib/x86_64-linux-gnu/perl/cross-config-5.26.1/Config.pm >5.txt
####
$ cat 4.tk.pl
#!/usr/bin/perl -w
use 5.011;
use utf8;
use Config qw/%Config config_vars/;
use lib "1.псы/template_stuff";
use utils1 qw/print_hash/;
my $archname = $Config{'archname'};
print "<$archname>\n";
say "---------------";
config_vars( "archname", "version", "libpath", "perl", "scriptdir", "sitearchexp" );
say "---------------";
my $ref_Config = \%Config;
print Dumper $ref_Config; # print() on unopened filehandle Dumper
# print Dumper $Config; # Variable "$Config" is not imported
print_hash($ref_Config);
say "---------------";
use Path::Tiny;
my ($archlibexp, $version) = ($Config{archlibexp},$Config{version});
my $arch_path = path($archlibexp)->parent;
say "arch_path is $arch_path";
my $path_to_Config = path($arch_path,$version, "Config.pm");
my @lines = $path_to_Config->lines;
say "lines are @lines";
say "---------------";
my $ref2_Config = \%Config::Config;
print Dumper $ref2_Config;
say "---------------";
use ExtUtils::MakeMaker::Config;
say $Config{installbin};
say "---------------";
$Data::Dumper::Sortkeys = \&my_filter;
my $foo = { map { (ord, "$_$_$_") } 'I'..'Q' };
say "foo is %$foo";
# print Dumper $foo; # print() on unopened filehandle Dumper
print_hash($foo);
my $bar = { %$foo };
my $baz = { reverse %$foo };
print Dumper [ $foo, $bar, $baz ];
sub my_filter {
my ($hash) = @_;
# return an array ref containing the hash keys to dump
# in the order that you want them to be dumped
return [
# Sort the keys of %$foo in reverse numeric order
$hash eq $foo ? (sort {$b <=> $a} keys %$hash) :
# Only dump the odd number keys of %$bar
$hash eq $bar ? (grep {$_ % 2} keys %$hash) :
# Sort keys in default order for all other hashes
(sort keys %$hash)
];
}
$
####
---------------
archname='x86_64-linux-gnu-thread-multi';
version='5.26.1';
libpath='UNKNOWN';
perl='perl';
scriptdir='/usr/bin';
sitearchexp='/usr/local/lib/x86_64-linux-gnu/perl/5.26.1';
---------------
subroutine says this is your hash:
key: Author, value:
key: CONFIG, value: true
...
key: zcat, value:
key: zip, value: zip
---------------
arch_path is /usr/lib/x86_64-linux-gnu/perl
lines are # This file was created by configpm when Perl was built. Any changes
# made to this file will be lost the next time perl is built.
# for a description of the variables, please have a look at the
# Glossary file, as written in the Porting folder, or use the url:
# http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/Glossary
package Config;
use strict;
use warnings;
use vars '%Config', '$VERSION';
$VERSION = "5.026001";
# Skip @Config::EXPORT because it only contains %Config, which we special
# case below as it's not a function. @Config::EXPORT won't change in the
# lifetime of Perl 5.
my %Export_Cache = (myconfig => 1, config_sh => 1, config_vars => 1,
config_re => 1, compile_date => 1, local_patches => 1,
bincompat_options => 1, non_bincompat_options => 1,
header_files => 1);
@Config::EXPORT = qw(%Config);
@Config::EXPORT_OK = keys %Export_Cache;
# Need to stub all the functions to make code such as print Config::config_sh
# keep working
sub bincompat_options;
sub compile_date;
sub config_re;
sub config_sh;
sub config_vars;
sub header_files;
sub local_patches;
sub myconfig;
sub non_bincompat_options;
# Define our own import method to avoid pulling in the full Exporter:
sub import {
shift;
@_ = @Config::EXPORT unless @_;
my @funcs = grep $_ ne '%Config', @_;
my $export_Config = @funcs < @_ ? 1 : 0;
no strict 'refs';
my $callpkg = caller(0);
foreach my $func (@funcs) {
die qq{"$func" is not exported by the Config module\n}
unless $Export_Cache{$func};
*{$callpkg.'::'.$func} = \&{$func};
}
*{"$callpkg\::Config"} = \%Config if $export_Config;
return;
}
die "$0: Perl lib version (5.26.1) doesn't match executable '$^X' version ($])"
unless $^V;
$^V eq 5.26.1
or die sprintf "%s: Perl lib version (5.26.1) doesn't match executable '$^X' version (%vd)", $0, $^V;
sub FETCH {
my($self, $key) = @_;
# check for cached value (which may be undef so we use exists not defined)
return exists $self->{$key} ? $self->{$key} : $self->fetch_string($key);
}
sub TIEHASH {
bless $_[1], $_[0];
}
sub DESTROY { }
sub AUTOLOAD {
require 'Config_heavy.pl';
goto \&launcher unless $Config::AUTOLOAD =~ /launcher$/;
die "&Config::AUTOLOAD failed on $Config::AUTOLOAD";
}
# tie returns the object, so the value returned to require will be true.
tie %Config, 'Config', {
archlibexp => '/usr/lib/x86_64-linux-gnu/perl/5.26',
archname => 'x86_64-linux-gnu-thread-multi',
cc => 'x86_64-linux-gnu-gcc',
d_readlink => 'define',
d_symlink => 'define',
dlext => 'so',
dlsrc => 'dl_dlopen.xs',
dont_use_nlink => undef,
exe_ext => '',
inc_version_list => '5.26.0 5.26.0/x86_64-linux-gnu-thread-multi',
intsize => '4',
ldlibpthname => 'LD_LIBRARY_PATH',
libpth => '/usr/local/lib /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed /usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib',
osname => 'linux',
osvers => '4.9.0',
path_sep => ':',
privlibexp => '/usr/share/perl/5.26',
scriptdir => '/usr/bin',
sitearchexp => '/usr/local/lib/x86_64-linux-gnu/perl/5.26.1',
sitelibexp => '/usr/local/share/perl/5.26.1',
so => 'so',
useithreads => 'define',
usevendorprefix => 'define',
version => '5.26.1',
};
---------------
---------------
/usr/bin
---------------
foo is %HASH(0x55f2c54cf370)
subroutine says this is your hash:
key: 73, value: III
key: 74, value: JJJ
key: 75, value: KKK
key: 76, value: LLL
key: 77, value: MMM
key: 78, value: NNN
key: 79, value: OOO
key: 80, value: PPP
key: 81, value: QQQ
####
arch_path is /usr/lib/x86_64-linux-gnu/perl
---------------
archlib matched: /usr/lib/x86_64-linux-gnu/perl/5.26
archlibexp matched: /usr/lib/x86_64-linux-gnu/perl/5.26
config_arg13 matched: -Darchlib=/usr/lib/x86_64-linux-gnu/perl/5.26
config_arg16 matched: -Dvendorarch=/usr/lib/x86_64-linux-gnu/perl5/5.26
...
installarchlib matched: /usr/lib/x86_64-linux-gnu/perl/5.26
installvendorarch matched: /usr/lib/x86_64-linux-gnu/perl5/5.26
vendorarch matched: /usr/lib/x86_64-linux-gnu/perl5/5.26
vendorarchexp matched: /usr/lib/x86_64-linux-gnu/perl5/5.26
####
#!/usr/bin/perl -w
use 5.011;
use utf8;
use Config qw/%Config config_vars/;
use lib "1.псы/template_stuff";
use utils1 qw/print_hash/;
use Path::Tiny;
my ( $archlibexp, $version ) = ( $Config{archlibexp}, $Config{version} );
my $arch_path = path($archlibexp)->parent;
say "arch_path is $arch_path";
my $path_to_Config = path( $arch_path, $version, "Config.pm" );
my @lines = $path_to_Config->lines;
# say "lines are @lines"; this works
say "---------------";
for ( keys %Config ) {
next if ($Config{$_} eq undef);
if ( $Config{$_} =~ m%/usr/lib/x86_64-linux-gnu/perl% ) {
say "$_ matched: $Config{$_}";
}
}