use 5.010; use Algorithm::Combinatorics qw(variations_with_repetition); say join q(), @{ $_ } for variations_with_repetition [qw(ABC EFG KLM XYZ)], 2; __END__ ABCABC ABCEFG ABCKLM ABCXYZ EFGABC EFGEFG EFGKLM EFGXYZ KLMABC KLMEFG KLMKLM KLMXYZ XYZABC XYZEFG XYZKLM XYZXYZ