use Algorithm::FastPermute; my @c = ('a'..'c'); for my $i (0..2) { for my $j (0..2) { my @c = @c[$i..$j] if $i <= $j; permute {print @c , "\n"} @c; } } __END__ a ab ba abc acb cab bac bca cba b bc cb c