#! /usr/bin/perl -w use strict; my $BeDugg= 0; my $uhome_CPAN_conf= q[/home/somian/.cpan/CPAN/MyConfig.pm]; my $_MyConfigPM= do { open local(*FH),$uhome_CPAN_conf or die "can't open: $!" ; sysread( FH, my $buf, -s FH ) ; $buf }; my( $befoD , $postD ) = ( [] , [] ); my( $p1 , $p2 ) = ( 0 , 0 ); my( $ConfH ) = ( [] ); my $linecnt = 1; EASYPIECES: for my $cln ( split qq[\n] => $_MyConfigPM ) { printf(STDERR "Line %3u:",$linecnt++) if $BeDugg; print STDERR "Found: \"$cln\" and " if $cln =~ /^\s*\$\QCPAN::Config\E\s+=/ and $BeDugg; do { print STDERR '$p1 holds value '.$p1.qq[\n] if $BeDugg; push @$befoD => $cln; next EASYPIECES } unless $p1 + $cln =~ /^\s*\$\QCPAN::Config\E\s+=/ .. $p1++; do { push @$ConfH => $cln; next EASYPIECES } unless ( $p2 + $cln =~ /^\s*\Q}\E\s*;\s*\Z/ .. $p2++ ); push @$postD => $cln } scalar @$ConfH and push @$ConfH => '};'; # Check data print STDOUT 'Part 1:', join(qq[\n], @$befoD, q[],q[]); print STDOUT 'Part 2:', join(qq[\n], @$ConfH),qq[\n\n]; print STDOUT 'Part 3:', join(qq[\n], @$postD, q[]); exit 0;