my @set = qw(foo bar baz); # use glob to expand all permutations my @perm = glob( join(",", ("{".join(",",@set)."}") x @set) ); print "Permutations:\n"; print "$_\n" for @perm; # filter out duplicates my %uniq; my @comb = grep !$uniq{$_}++, map join(",",sort split(/,/,$_)), @perm; print "Combinations:\n"; print "$_\n" for @comb;