http://www.perlmonks.org?node_id=1002458


in reply to recursively reduce an array

If you are sorting on values, do you mean something like this?

use strict; use warnings; use feature qw{ say }; sub groupsOf (&$@); my %hash = map { $_ => int rand 50 } q{a} .. q{z}; say qq{$_\n-----} for groupsOf { join qq{\n}, map { qq{$_ => $hash{ $_ }} } @_ } 10, sort { $hash{ $a } <=> $hash{ $b } } keys %hash; sub groupsOf (&$@) { my $rcToRun = shift; my $groupsOf = shift; my $rcDoIt; $rcDoIt = sub { $rcToRun->( map shift, 1 .. ( @_ < $groupsOf ? @_ : $groupsOf ) ), @_ ? &$rcDoIt : (); }; &$rcDoIt; }

The output.

$ ./spw1002389 n => 0 t => 2 w => 5 g => 8 d => 16 b => 16 c => 18 j => 20 o => 22 h => 23 ----- y => 25 k => 28 i => 29 q => 29 s => 30 x => 31 u => 34 l => 34 p => 34 m => 36 ----- f => 38 v => 38 r => 43 a => 43 e => 49 z => 49 ----- $

I hope this is heading in the right direction but please ask further if we have misunderstood your problem.

Cheers,

JohnGG