Thx, Haukex, you've been instrumental in helping me to disambiguate Config situations in such nodes as Re^5: redacting from config hash and node Re^3: redacting from config hash. I hope this isn't a three strikes, you're out scenario, as I fanned on this one pretty hard. I was unaware that this Config was stamped when the user's perl install was made. It's been revealing for me to poke around in this space as a guy who knows some C. I wanted to see if I could read Config.pm, so typed
locate Config.pm >1.txt
I might have had 20 candidates with many interesting features on their own right, but I think I narrowed it down to 3 that look like the Config.pm that gets used.
diff /usr/lib/x86_64-linux-gnu/perl/5.26.1/Config.pm /usr/lib/x86_64-l
+inux-gnu/perl-base/Config.pm >2.txt
diff /usr/lib/x86_64-linux-gnu/perl/5.26.1/Config.pm /usr/lib/x86_64-l
+inux-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-lin
+ux-gnu/perl/cross-config-5.26.1/Config.pm >5.txt
They weren't different from each other except for path. So I try to add functionality to a script to organize and probe these values. My next attempt fell apart when I tried to use Data::Dumper. What's more when I tried to work up the example from Data::Dumper, I couldn't get anywhere. I was able to cobble together a path for one of the Config.pm's using Path::Tiny and slurp it in. It's not horrendously long like some of this output, but to save the monastery's collective scrollfingers, I'll list the script and put abridged output between readmore tags:
$ 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", "s
+itearchexp" );
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)
];
}
$
How did I lose my grip on Data::Dumper so as not to be able to even work up the example code?
With 1000's of values in this hash, would I find a variable that contained the path that I think is probable for being the one actually used when during use Config ();? Not really. Output then source:
#!/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{$_}";
}
}
My question here is how does perl decide which Config.pm it uses?
Thank you for your comments, haukex; I've been following your webperl development and have gotten good initial results that I'm building on. |