@a = grep !$x{$_}++, @a; #lub
@a = keys %{ { map { $_, 0 } @a } };
W drugim przypadku tablica może zmienić kolejność elementów.
@znalezione = grep {$szukana eq $_} @tablica;
lub robiąc sobie hash z wartościami tablicy (patrz duplikaty w tablicy).
@hash{@tablica} = (1)x(scalar(@tablica));
if ($hash{$szukana}) { print "jest\n"; }
for (1..$#a) { unshift @a,splice(@a,rand($#a),1) }
lub
while(@a) {push @b, splice(@a,rand(@a),1)}; @a=@b;
%hash = @tablica;
Dwie tablice (klucze,wartości):
@hash{@klucze}=@wartosci;
lub
%hash = map { ( $klucze[$_] => $wartosci[$_] ) } 0..$#wartosci;
albo pisząc w sposób zrozumiały:
for (0..$#wartosci) {
$hash{$klucze[$_]} = $wartosci[$_];
}
my %p2a, %a2p,$pol,$ang;
while(($pol=<>)) {
chomp $pol;
$ang = <>;
chomp $ang;
$a2p{$ang} = $pol;
$p2a{$pol} = $ang;
}
A następnie zamienić:
$wzorzec = join('|',keys %a2p); #wykaz slow do zamiany
$test =~ s/\b($wzorzec)\b/$a2p{$1}/g; #zamiana
Sortowanie według klucza:
@klucze = sort keys %hash;
lub sortowanie wegług wartości:
@klucze = sort { $hash{$a} <=> $hash{$b} } keys %hash;
Uwaga: jeśli wartości są napisami, należy użyć cmp zamiast <=>
sprawdzenie posortowania:
foreach (@klucze) {print "$_ => $hash{$_}\n";}
Można też przyjrzeć się Tie::IxHash.