%seen = ();
@list = grep { ! $seen{$_} ++ } @list;
oder mit map:
my @uniq = keys %{{ map {$_ => 1} @list }};
%seen = ();
@seen{@_} = 1;
@list = keys %all;
Achtung! Die Originalreihenfolge der Elemente geht verlohren.
@list = grep { $_; } @list;
$found = grep { $_ eq $element } @list;
%seen = ();
grep { ! $seen{$_} ++ } @list;
@list = grep { $seen{$_} > 1 } (keys %seen);
@big = grep { $_ > 1000000 } @nums;
sub fisher_yates_shuffle
{
my $array = shift; my $i;
for ($i = @$array; --$i;)
{
my $j = int rand ($i+1);
next if $i == $j;
@$array[$i,$j] = @$array[$j,$i];
}
return(wantarray ? @array : @array);
}
@shuffle = &fisher_yates_shuffle(@array);
Ab Perl 5.8.0 kann auch folgender Aufruf verwendet werden:
use List::Util 'shuffle';
@shuffle = shuffle(@aray);
@fruits = qw(Apfel Birne);
$fruit_ref = @fruits;
foreach (@{$fruit_ref})
{
print $_;
}
Zum löschen von Elementen aus einem Array steht mit splice ein mächtiges Werkzeug zur Verfügung.
Die allgemeine Syntax von splice ist:
splice(@array, $index, $numer_to_delete); Beschreibung von splice im Detail
Wenn die Elemente eines Array oder einer Liste manipuliert werden, sollte die Funktion foreach nicht verwendet werden. Als einfache Alternative bietet sich while an.
my $index = 0;
while ($index <= $#array)
{
if ($array[$index] eq 'kriterium') { splice(@array, $index, 1); }
else { $index++; }
}
Damit werden alle Elemente mit dam Inhalt 'kriterium' entfernt und das Array gekürzt.
Mit der Funktion grep Dateien eines Verzeichnisses in ein Array einlesen.
Alle HTML (.htm, .html) Dateien einlsen:
@array = grep { /.html*$/i } readdir DIR;
Alle HTML (.htm, .html) Dateien einlsen, ohne Index-Datei(en):
@array = grep { /.html*$/i && !/^index./i } readdir DIR;