states with comments only
my %states_with_comments = map { ((split /=/, $$_[0], 2)[1], 'hurray!') } grep { $$_[2] } map { values %$_ } values %$db; print "states are: ", (join "; ", sort, keys %states_with_comments), " +\n";
result is
root@orion:/tmp# ./mytest.pl states are: West Virginia; Washington
and here same clarification, read code from bottom to UP (!!!):
:my %states_with_comments = # and finnaly + we will take keys from hash map { ((split /=/, $$_[0], 2)[1], 'hurray!') } # split firs +t element on satename= and name, take name, make %key => 'hurray!" grep { $$_[2] } # test if array has 3-rd element t +hat is comment map { values %$_ } # take arrays that are below PR, A +K, WA, WV values %$db; # make list of hashes below numbers +99155, 26134
Perl is well suited to process DATA FLOW and not loop, over loop, over loop... You could do loopoing in Python, Javascript. But in Perl you should process sets of data.
If you want to see internals just inject Dumpers:
my %states_with_comments = grep { warn Dumper({"finally" => $_}); 1; } map { ((split /=/, $$_[0], 2)[1], 'hurray!') } grep { warn Dumper({"after filtering" => $_}); 1; } grep { $$_[2] } grep { warn Dumper({"second step is" => $_}); 1; } map { values %$_ } grep { warn Dumper({"first step is" => $_}); 1; } values %$db;
result with debugging:
root@orion:/tmp# ./mytest.pl $VAR1 = { 'first step is' => { 'PR' => [ 'state_name=Puerto Rico', 'county_names_all=Adjuntas|Ut +uado' ], 'AK' => [ 'state_name=Alaska', 'county_names_all=Ketchikan G +ateway|Prince of + Wales-Hyder' ], 'WA' => [ 'state_name=Washington', 'county_names_all=Pend Oreill +e|Spokane|Lincol +n|Adams', 'comments=America/Los_Angeles +' ] } }; $VAR1 = { 'first step is' => { 'WV' => [ 'state_name=West Virginia', 'county_names_all=Wirt|Wood|J +ackson|Ritchie| +Calhoun', 'comments=America/New_York' ] } }; $VAR1 = { 'second step is' => [ 'state_name=Puerto Rico', 'county_names_all=Adjuntas|Utuado' ] }; $VAR1 = { 'second step is' => [ 'state_name=Alaska', 'county_names_all=Ketchikan Gateway|Pr +ince of + Wales-Hyder' ] }; $VAR1 = { 'second step is' => [ 'state_name=Washington', 'county_names_all=Pend Oreille|Spokane +|Lincol +n|Adams', 'comments=America/Los_Angeles' ] }; $VAR1 = { 'second step is' => [ 'state_name=West Virginia', 'county_names_all=Wirt|Wood|Jackson|Ri +tchie| +Calhoun', 'comments=America/New_York' ] }; $VAR1 = { 'after filtering' => [ 'state_name=Washington', 'county_names_all=Pend Oreille|Spokan +e|Lincol +n|Adams', 'comments=America/Los_Angeles' ] }; $VAR1 = { 'after filtering' => [ 'state_name=West Virginia', 'county_names_all=Wirt|Wood|Jackson|R +itchie| +Calhoun', 'comments=America/New_York' ] }; $VAR1 = { 'finally' => 'Washington' }; $VAR1 = { 'finally' => 'hurray!' }; $VAR1 = { 'finally' => 'West Virginia' }; $VAR1 = { 'finally' => 'hurray!' }; states are: West Virginia; Washington
In reply to Re: Get all hash value into array
by leszekdubiel
in thread Get all hash value into array
by Magnolia25
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |