#!/usr/bin/perl # Dieses Skript gibt die Potenzmenge der Liste seiner Parameter aus. # Loesung von betterworld / perl-community.de require 5.8.1; # Wegen (??{}) use strict; use warnings; use locale; # für [:print:] use re 'eval'; my %hash; sub pushit{  my @ar = grep {defined and length } map {eval '$'.$_} 1..@ARGV;  my $cute_list = join ",", @ar;  # An alle Tester: Gibt das bei Euch auch einen Segfault, wenn man diese  # Zeile durch $cute_list =~ s/\n//g ersetzt?  # Und wenn ich beides nehme, passieren noch seltsamere Sachen...  $cute_list =~ y/\n//d;  $hash{$cute_list} = undef if length $cute_list;  return qr/^.^/; # Das sollte nie matchen --> Backtracing } my $A = (join "\n", @ARGV)."\n"; my $re = join '(?:^.*\n)*', map {'(^.*\n)?'} 1..@ARGV; # Hier passiert die eigentliche Arbeit $A =~ m/$re(??{pushit()})/m; print "{"; if ("\370" =~ /[[:print:]]/) {  print "\370"; } else {  print "{}"; } # Hier benutze ich ";" statt ",", damit man durch Zaehlen der Semikola in der # Ausgabe leicht ueberpruefen kann, dass es 2**n Elemente sind. print "; {$_}" for sort keys %hash; print "}\n";