my @superset = split /\s+/, 'convert python to perl'; my $N = scalar @superset; for my $combo (0..((2**$N) - 1)) { # a combo is also a bit mask print "selection:"; for my $selector (0..($N-1)) { # a selector is also a bit (2**$selector) & $combo and print ' ' . $superset[$selector]; } print "\n"; }