use Algorithm::Loops qw( NextPermute ); my @list = sort qw( a b c ); do { print(join(', ', @list), "\n"); } while (NextPermute(@list)); #### There are 24 permutations of abcd, 4 taken at a time: abcd, abdc, acbd, acdb, adbc, adcb, bacd, badc, bcad, bcda, bdac, bdca, cabd, cadb, cbad, cbda, cdab, cdba, dabc, dacb, dbac, dbca, dcab, dcba There is 1 combination of abcd, 4 taken at a time: abcd There are 24 permutations of abcd, 3 taken at a time: abc, acb, bac, bca, cab, cba, abd, adb, bad, bda, dab, dba, acd, adc, cad, cda, dac, dca, bcd, bdc, cbd, cdb, dbc, dcb There are 3 combinations of abcd, 3 taken at a time: abc, abd, acd, bcd