#!/usr/bin/perl use strict; use warnings; use Algorithm::Permute; my $p = Algorithm::Permute->new(['a','b','c','d','e'], 3); my @results; while (my @res = $p->next) { push @results, [@res = sort @res]; # use a different sort for numbers } my %seen; @results = map {!$seen{"@$_"}++? $_:() }@results; # remove duplicates! print join ("+",@$_)."\n" for @results; __END__ Prints: Again I sorted results in program editor because actual program probably doesn't need that feature. a+b+c a+b+d a+b+e a+c+d a+c+e a+d+e b+c+d b+c+e b+d+e c+d+e The unsorted output for reference:: a+b+c b+c+d a+c+d a+b+d b+c+e a+c+e b+d+e c+d+e a+d+e a+b+e