in reply to howto map/grep a complex structure
You could build your own map like operators for hashes if you really wanted. But nonstandard ops are not wildly readable.
You might try shortening your code with a while ( each ) and a grep or smartmatch ~~ if you want, but both structures are disputed.
depending on if you really need each submatch :
use Data::Dump; my $hash={}; for my $hk ( 4..10 ) { push @{$hash->{$hk}->{member}}, 1..$hk,1..$hk; } dd $hash; $\="\n"; my $pat="8"; print "Test1:"; while ( my ($hk,$hv) = each %$hash ) { print "$hk " x grep {$pat eq $_} @{$hv->{member}}; } print "Test2"; while ( my ($hk,$hv) = each %$hash ) { print "$hk" if $pat ~~ $hv->{member}; }
{ 4 => { member => [1 .. 4, 1 .. 4] }, 5 => { member => [1 .. 5, 1 .. 5] }, 6 => { member => [1 .. 6, 1 .. 6] }, 7 => { member => [1 .. 7, 1 .. 7] }, 8 => { member => [1 .. 8, 1 .. 8] }, 9 => { member => [1 .. 9, 1 .. 9] }, 10 => { member => [1 .. 10, 1 .. 10] }, } Test1: 8 8 10 10 9 9 Test2 8 10 9
Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
Je suis Charlie!
|
|---|