#!/usr/bin/env perl use Modern::Perl; sub rpow { my ($p, $q) = $_[0] =~ /(.)(.*)/; return $_[0] ? map { ($p.$_, $_) } rpow ($q) : ''; } say join ("\n", rpow 'ABCD'); #### #!/usr/bin/env perl use Modern::Perl; sub bpow { map { my $m = unpack("b*", pack("i*",$_)); $m =~ s/0/\0/g; $m =~ s/1/~"\0"/ge; $m & $_[0]; } 0..2**length($_[0])-1 } say join ("\n", bpow 'ABCD');