flame: Doppelte listenelemente entfernen

hallo, ich kriege das nicht hin, der zeigt mir immernoch doppelte elemente an. Bitte helft mir. Ich bin ein Anfänger.

hier ist mein Code
use IO;

$unordnung='.\test.txt';
$ordnung='.\ordnung.txt';

open (IN,"<$unordnung");
open (OUT,">$ordnung");
OUT->autoflush(1);

@werte=<IN>;

$t=0;
         while (@werte)

{
  print $t;
  print "Doppelt sind: @werte[$t]\n";

chomp;
  splice @werte,0, $t;

$t++;

}

close IN;
close OUT;

  1. hi,

    hallo, ich kriege das nicht hin, der zeigt mir immernoch doppelte elemente an. Bitte helft mir. Ich bin ein Anfänger.

    guck mal http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.7.1.3

    beschreibt wie über einen hash die duplikate rausfliegen.

    Viele Grüße, Rolf

    1. hey, super danke, ich werde es gleich mal ausprobieren. wenn es nichzt klappt melde ich mich nochmal.

      1. Es hat geklappt, vielen Dank! Jetzt muss ich nur noch verstehen was da passiert. ;-)

        mfg Flame

        1. hi,

          Es hat geklappt, vielen Dank! Jetzt muss ich nur noch verstehen was da passiert. ;-)

          Danke fürs Danke ;-)

          Wie's geht? Ganz einfach: in einem hash gibt es keine doppelten Keys - und das ist der Trick.

          Array mit duplikaten

          @ar = qw(emil wolle wolle emil erwin erwin rolf rolf otto otto ulla otto);

          array auf einen hash einlesen, nur die keys

          for (@ar){ $uni{$_} = 1 };

          Jedes Listenelement wird als Key mit Value=1 auf einen hash gelesen und da es nur einen Key mit gleichem Wert geben darf in einem hash fliegen die Duplikate raus (tatsächlich werden die Values überschrieben).

          oder einfacher:

          %uni = map{$_,1}@ar; # Tipp von Wingi

          Und irgendie geht das noch einfacher, perldoc...

          hash (nur die keys) ausgeben

          print join "\n", sort keys %uni;

          Zur Übung:
          Erstelle dein Array mal neu ohne Duplikate (array leer machen oder neu definieren, Schleife bauen oder mit map - trau dich).

          Viele Grüße, Rolf

          1. oder einfacher:

            %uni = map{$_,1}@ar; # Tipp von Wingi

            oder noch einfacher mit einem sogenannten slice:

            Array mit duplikaten

            my @ar = qw(emil wolle wolle emil erwin erwin rolf rolf otto otto ulla otto);

            my %test;
            @test{@ar} = ();

            @ar = keys %test;

            use Data::Dumper;

            print Dumper @ar;

            Struppi.

            1. hi Struppi,

              jow, ich erinnere mich ...

              oder noch einfacher mit einem sogenannten slice:

              Array mit duplikaten

              my @ar = qw(emil wolle wolle emil erwin erwin rolf rolf otto otto ulla otto);

              my %test;
              @test{@ar} = ();

              @ar = keys %test;

              use Data::Dumper;

              print Dumper @ar;

              Struppi.

              Coole Mucke die rockt ;-)

              Viele Grüße, Rolf

              PS: Muss auch mal wieder perldoc lesen...