sub find_groups(&\@)
{
my( $keymap, $rows_ar ) = @_;
my %groups;
for ( @$rows_ar )
{
push @{ $groups{ &$keymap } }, $_;
}
\%groups
}
####
my $groups_hr = find_groups { $_->{'name'} } @rows;
for my $k ( sort keys %$groups_hr )
{
print "$k\t" . @{$groups_hr->{$k}} . "\n";
}
##
##
find_groups { join $;, @{$_}{qw( name game score )} } @rows;
##
##
find_groups {
$_->{'name'} eq 'foo' ? 1 :
$_->{'game'} =~ /bar/ ? 2 :
$_->{'score'} >= 500 ? 3 : 0
} @rows;
##
##
use List::Util qw( sum );
my $groups_hr = find_groups { $_->{'name'} } @rows;
for my $k ( sort keys %$groups_hr )
{
my $avg = sum( map { $_->{'score'} } @{$groups_hr->{$k}} ) / @{$groups_hr->{$k}};
print "$k\t$avg\n";
}
##
##
map { $_->{'score'} } @rows