use Algorithm::Combinatorics qw(variations_with_repetition); my @data = (1,2); my $at_a_time = 3; my $variations_iterator = variations_with_repetition(\@data, $at_a_time); while (my $variant = $variations_iterator->next) { print "@$variant\n"; }