Sigue el código:
lhp@nereida:~/Lperl/src$ cat -n allsubsets.pl
 1  #!/usr/bin/perl -w
 2  use strict;
 3
 4  sub subsets {
 5    my @set = @_;
 6    my $powern = 1 << @set;
 7    my $n = -1;
 8
 9    my $s = sub {
10      $n++;
11      return map {  $n & (1 << $_)? ($set[$_]) : () } 0..$#set;
12    };
13
14    return $s;
15  }
16
17  die "$0 el1 el2 el3 ...\n" unless @ARGV;
18  my $s = subsets(@ARGV);
19
20  my @S;
21  FOREVER: {
22    @S = $s->();
23
24    local $" = ', ';
25    print "(@S)\n";
26
27    last if (@S == @ARGV);
28
29    redo FOREVER;
30  }
Casiano Rodríguez León
