Arrays
use strict; use warnings;
my @f = ("Apfel", "Birne", "Kirsche");
print "$f[0] $f[-1] $#f ", scalar(@f), "\n";
push @f, "Dattel"; # hinten anfügen
unshift @f, "Ananas"; # vorne einfügen
my $hinten = pop @f; # hinten entfernen
my $vorn = shift @f; # vorne entfernen
print "$hinten $vorn @f\n";
print "Ausschnitt: @f[0,1] | @f[1..2]\n";
splice(@f, 1, 1, "Banane", "Brombeere"); # ersetzen
print "@f\n";
my @sortiert = sort @f;
my @rueck = reverse sort @f;
print "@sortiert | @rueck\n";
my @zahlen = sort { $a <=> $b } (10, 9, 100, 1); # numerisch sortieren
print "@zahlen\n";
my @quadrate = map { $_ * $_ } 1..5;
my @gerade = grep { $_ % 2 == 0 } 1..10;
print "@quadrate | @gerade\n";
print join(", ", map { uc } @f), "\n";
my ($erstes, @rest) = (1, 2, 3, 4);
print "$erstes | @rest\n";
print "Index von Banane: ", (grep { $f[$_] eq "Banane" } 0..$#f)[0], "\n";
my @kopie = @f; # Kopie
$kopie[0] = "X";
print "$f[0] $kopie[0]\n";
print "enthalten\n" if grep { $_ eq "Dattel" } @f;
my @leer = ();
print "leer\n" unless @leer;
print scalar(@{[1..3]}), "\n";
my @mit_undef = (1, undef, 3);
print defined $mit_undef[1] ? "def" : "undef", "\n";
print "Wiederholte Liste: ", join(",", (1) x 3), "\n";Apfel Kirsche 2 3 Dattel Ananas Apfel Birne Kirsche Ausschnitt: Apfel Birne | Birne Kirsche Apfel Banane Brombeere Kirsche Apfel Banane Brombeere Kirsche | Kirsche Brombeere Banane Apfel 1 9 10 100 1 4 9 16 25 | 2 4 6 8 10 APFEL, BANANE, BROMBEERE, KIRSCHE 1 | 2 3 4 Index von Banane: 1 Apfel X leer 3 undef Wiederholte Liste: 1,1,1
$_ ist die Standardvariable: map, grep, for und viele Funktionen nutzen sie, wenn du nichts angibst.
List::Util: nützliche Listenfunktionen
use strict; use warnings;
use List::Util qw(sum sum0 min max first reduce shuffle uniq any all none);
my @z = (3, 1, 4, 1, 5, 9, 2, 6);
print sum(@z), " ", min(@z), " ", max(@z), "\n";
print join(",", uniq @z), "\n";
print first { $_ > 4 } @z;
print "\n";
print reduce { $a * $b } 1..5;
print "\n";
print( (any { $_ == 9 } @z) ? "enthält 9\n" : "nicht\n");
print( (all { $_ > 0 } @z) ? "alle positiv\n" : "nicht alle\n");
print scalar(@{[shuffle @z]}), "\n";31 1 9 3,1,4,5,9,2,6 5 120 enthält 9 alle positiv 8
Hashes
Ein Hash (%h) ordnet Schlüssel Werten zu. Die Reihenfolge ist nicht garantiert: Sortiere die Schlüssel, wenn die Ausgabe stabil sein soll.
use strict; use warnings;
my %alter = (Mia => 17, Tom => 25, Zoe => 31);
$alter{Ben} = 9; # hinzufügen
$alter{Mia}++; # ändern
delete $alter{Tom};
print "Mia ist $alter{Mia}\n";
print exists $alter{Zoe} ? "Zoe existiert\n" : "keine Zoe\n";
print "Anzahl: ", scalar(keys %alter), "\n";
for my $name (sort keys %alter) {
print "$name => $alter{$name}\n";
}
for my $name (sort { $alter{$a} <=> $alter{$b} } keys %alter) { # nach Wert sortiert
print "$name ";
}
print "\n";
my @werte = sort { $a <=> $b } values %alter;
print "@werte\n";
my %invers = reverse %alter;
print join(",", map { "$_=$invers{$_}" } sort { $a <=> $b } keys %invers), "\n";
my @auswahl = @alter{qw(Mia Zoe)}; # Hash-Slice
print "@auswahl\n";
my %zaehler;
$zaehler{$_}++ for split //, "mississippi";
print join(" ", map { "$_:$zaehler{$_}" } sort keys %zaehler), "\n";
while (my ($k, $v) = each %alter) { } # each iteriert (Reihenfolge zufällig)
print "undefiniert: ", defined $alter{xyz} ? "ja" : "nein", "\n";
my %zusammen = (%alter, Neu => 1);
print scalar(keys %zusammen), "\n";Mia ist 18 Zoe existiert Anzahl: 3 Ben => 9 Mia => 18 Zoe => 31 Ben Mia Zoe 9 18 31 9=Ben,18=Mia,31=Zoe 18 31 i:4 m:1 p:2 s:4 undefiniert: nein 4
Mengen und Duplikate mit Hashes
use strict; use warnings;
my @a = qw(a b c d);
my @b = qw(c d e);
my %in_b = map { $_ => 1 } @b;
my @nur_a = grep { !$in_b{$_} } @a;
my @beide = grep { $in_b{$_} } @a;
print "nur a: @nur_a | beide: @beide\n";
my %gesehen;
my @eindeutig = grep { !$gesehen{$_}++ } qw(x y x z y);
print "@eindeutig\n";nur a: a b | beide: c d x y z
Merke
- Arrays:
push,pop,shift,unshift,splice,sort,reverse,map,grep $_ist die Standardvariable;$#aletzter Index- Hashes:
$h{key},keys,values,exists,delete; Reihenfolge nicht garantiert List::Utilliefertsum,max,first,reduce,uniq- Hash als Menge/Zähler:
$count{$_}++
Aufgabe
Zähle die Wörter eines Textes mit einem Hash und gib sie nach Häufigkeit sortiert aus.