#!/usr/bin/perl -w use strict; use Algorithm::Loops qw(NestedLoops); sub combo { #thanks Roy Johnson my $something = shift; my %seen; my $combos = NestedLoops([$something->[0],map {my $_hold = $_; sub {[grep {!$seen{join(':', sort @_, $_)}++} @{$something->[$_hold]}]}} 1..$#$something]); my $value = 0; my ($result, $someFct); while (my @result = $combos->()) { if (someSub(\@result) > $value) { $result = join (',', @result); $someFct = (someSub(\@result)); } else {();} } return $someFct,"\t",$result,"\n"; }