use warnings; use strict; use Data::Dumper; use Algorithm::Combinatorics qw(combinations); my @array = qw(A B C D); for (1 .. 4) { my @combos = combinations(\@array, $_); print Dumper(\@combos); } __END__ $VAR1 = [ [ 'A' ], [ 'B' ], [ 'C' ], [ 'D' ] ]; $VAR1 = [ [ 'A', 'B' ], [ 'A', 'C' ], [ 'A', 'D' ], [ 'B', 'C' ], [ 'B', 'D' ], [ 'C', 'D' ] ]; $VAR1 = [ [ 'A', 'B', 'C' ], [ 'A', 'B', 'D' ], [ 'A', 'C', 'D' ], [ 'B', 'C', 'D' ] ]; $VAR1 = [ [ 'A', 'B', 'C', 'D' ] ];