# bitte immer strict und warnings nutzen, # du bekommst dann bei vielen Fehlern Meldungen, # die perl ansonsten versuchen würde zu interpretieren. use strict; use warnings; # Dateiname der Datei, # welche die Zeile enthält # wie erstellst du die Datei? # Ich vermute mal, # dass du nicht immer eine Datei erstellen willst # um eindeutige Zeilen zu bekommen, oder? # Das ganze geht definitiv auch ohne Datei my $file='test.tab'; # macht das selbe wie # @liste = `cat test.tab`; open(my $fh,'<',$file) or die("ERROR open $file ($!)"); my @liste=<$fh>; close($fh); # unique ist ein Hash # ein Hash hat die Besonderheit, # dass alle Schlüssel(keys genannt) einzigartig sind, # dh, sie tauchen niemals doppelt auf. # das ist soweit klar? my %uniqe=(); # durchlaufe das Array rückwärts for my $cnt (reverse (0..$#liste)) { # die Zeile die oben ausgelesen wurde my $line=$liste[$cnt]; # entferne die Zeile aus dem Array wenn sie schon einmal gefunden wurde # wenn $line als Schlüssel in %unique schon mal vorgekommen ist ( "if($unique{$line})" ), # dann löschen wir die Zeile aus den Array @liste ( "splice(@liste, $cnt,1)" ) splice(@liste, $cnt,1) if($uniqe{$line}); # nun Zählen wir den Wert, # der zum Schlüssel $line gehört, um 1 hoch $uniqe{$line}++; # man kann hier auch schreiben: # $uniqe{$line}=1; # das gibt die Aktuelle Zeilennummer aus print "$cnt\n"; } # alles testweise ausgeben: for my $line (@liste) { print $line; }