my $dc = { 'north-america' => { '01/01/99' => { 'gross' => { 'web' => 99.99 'counter' => 10.95 } 'misc' => { 'web' => 2.50 } } { '01/02/99' => { 'gross' => '93.23' } } } #### # supporting constants: my %fnum = { 'region' => 0, 'date' => 1, 'type' => 2, 'channel' => 3 }; my $fsize = 4; sub reduce { my ($dc,$f) = @_; # sort fields to keep in decending order my @keep = reverse sort map { $fnum{$_} } @$f; for $cnt ($fsize-1 .. 0) { # hard code goes here! lol } }