1 1 2 1 3 1 4 1 2 3 1 2 4 1 3 4 1 2 3 4 2 2 3 2 4 2 3 4 3 3 4 4 #### my @list = (1,2,3,4); my $n = 2**@list -1; for $b(1..$n) { printf "%2d: %04b ", $b, $b; my $i = $b; for (@list) { print "$_ " if $i%2; $i >>= 1; } print "\n"; } __DATA__ 1: 0001 1 (get element 0) 2: 0010 2 (get element 1) 3: 0011 1 2 (get elements 0 and 1) 4: 0100 3 (get element 2) 5: 0101 1 3 (etc) 6: 0110 2 3 7: 0111 1 2 3 8: 1000 4 9: 1001 1 4 10: 1010 2 4 11: 1011 1 2 4 12: 1100 3 4 13: 1101 1 3 4 14: 1110 2 3 4 15: 1111 1 2 3 4