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{$_}"; } }