in reply to sorting a hash that's in another file
Assuming that the reason you don't want to execute the script is because the script contains other stuff besides the hash, then something like this might work. The regex is far from foolproof, but short of writing a Parse:RecDescent grammer to match perl, which is a very tall order, you might get away with the following (with a little tweaking as necessary).
It requires that none of the keys or values in the hash is likely to contain the sequence ');' and that the hash declaration is finished with that sequence. If that isn't true, then move on to the next idea:)
#! perl -slw use strict; use Data::Dumper; my $data = do{ local $/; <DATA> }; my %hash = eval "$1" if $data =~ m[ \n%some_hash\s*=\s* ( \( .* \); ) ]sx; print Dumper \%hash; my %newHash; for my $state (keys %hash ) { push @{ $newHash{ $_ } }, $state for split /\s*,\s*/, $hash{ $state }{colors}; } print Dumper \%newHash; __DATA__ Various other perl statements before the hash definition Various other perl statements before the hash definition Various other perl statements before the hash definition Various other perl statements before the hash definition Various other perl statements before the hash definition Various other perl statements before the hash definition %some_hash = ( 'NEW_YORK' => { 'capital' => 'Albany', 'colors' => 'black, green, blue', 'bird' => 'pigeon' }, 'MASSACHUSETTS' => { 'capital' => 'Springfield', 'colors' => 'red, white, blue', 'bird' => 'turkey' } # etc ); Various other perl statements after the hash definition Various other perl statements after the hash definition Various other perl statements after the hash definition Various other perl statements after the hash definition Various other perl statements after the hash definition Various other perl statements after the hash definition Various other perl statements after the hash definition
Output
P:\test>277327 $VAR1 = { 'MASSACHUSETTS' => { 'bird' => 'turkey', 'colors' => 'red, white, blue', 'capital' => 'Springfield' }, 'NEW_YORK' => { 'bird' => 'pigeon', 'colors' => 'black, green, blue', 'capital' => 'Albany' } }; $VAR1 = { 'green' => [ 'NEW_YORK' ], 'white' => [ 'MASSACHUSETTS' ], 'black' => [ 'NEW_YORK' ], 'blue' => [ 'MASSACHUSETTS', 'NEW_YORK' ], 'red' => [ 'MASSACHUSETTS' ] };
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: sorting a hash that's in another file
by alienhuman (Pilgrim) on Jul 24, 2003 at 13:55 UTC |