mapPerl

SeitenanfangSeitenendeBeschreibung

map{}() ist eine spezielle Funktion unter Perl, die auf Arrays angewendet wird. Als Ergebnis liefert map wieder ein Array. Mit map wird ein Array durchlaufen und Kopien dieser Werte bearbeitet. Das Array, das map bearbeitet, steht in den runden Klammern (@array). Wie map das betrachtete Array bearbeitet, steht in den geschweiften Klammern {}. Dazu benötigen wir jedoch wieder die Spezialvariable $_, die das aktuell betrachteten Arrayelement enthält. Einige Beispiele:

SeitenanfangSeitenendeBeispiele

# Quadrieren von Zahlen

@zahlen=(1..10);
@quadratzahlen=map{$_**2}(@zahlen);
print join(" - ", @quadratzahlen);
1 - 4 - 9 - 16 - 25 - 36 - 49 - 64 - 81 - 100

Das fällt auf:

Kürzer geht das natürlich auch:

print join(" - ", map {$_**2}(1..10));
1 - 4 - 9 - 16 - 25 - 36 - 49 - 64 - 81 - 100
# Umrechnung von DM in Euro

@dm_preise=(0.99, 1.39, 2.99, 4.19);
$euro=1.95583;

print join(" DM, ", @dm_preise)."DM\n".
  join(", ", map{($_/$euro)." EUR"} @dm_preise);
0.99 DM, 1.39 DM, 2.99 DM, 4.19 DM
0.506178962384256 EUR, 0.710695714862744 EUR, 1.52876272477669 EUR, 2.14231298221216 EUR

Einige typische Anwendung, bei der sich die map-Funktion bewährt sind ...

SeitenanfangSeitenendeSortieren von Hashes nach den Werten

Der folgende Hash %zugriffe, der die Zugriffe auf HTML-Seiten enthält, soll nach Anzahl der Zugriffe sortiert werden. Um das folgende Beispiel richtig zu verstehen, muss man unbedingt das Kapitel über die Referenzen verstanden haben. Man muss die letzte Zeile des Programms öfter durchlesen (von rechts nach links), um sie zu verstehen.

%zugriffe=(
  "start.htm" => 53,
  "inhalt.htm" => 123,
  "uebungen.htm" => 77,
  "einleitung.htm" => 12
);

print join "\n", map{($_->[0]).": ".($_->[1])} sort{$a->[1] <=> $b->[1]} map{[$_, $zugriffe{$_}] } keys %zugriffe;

Der Plan zu diesem Progrämmchen ist folgender:

einleitung.htm: 12
start.htm: 53
uebungen.htm: 77
inhalt.htm: 123
Diese Vorgehensweise wird auch als Schwartz'sche Tranformation bezeichnet.

Seitenanfang FehlermeldungHilfe zur Fehlermeldung © 2001-2003 Email an den AutorPerl, Lehrstuhl Mathe II, Uni Bayreuth