This shows you the differences between two versions of the page.
— |
kurs:1._einheit [2014/09/10 21:22] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ==== Scalare ==== | ||
+ | [[sparse_array.pl]] | ||
+ | |||
+ | <code> | ||
+ | # in perl gibt es 3 Typen von Variablen | ||
+ | |||
+ | # die einfachsten sind scalare | ||
+ | |||
+ | $a = 1; | ||
+ | $b = 2; | ||
+ | |||
+ | # zwischen " werden Variablen extrapoliert, soweit moeglich | ||
+ | |||
+ | print "$a $b\n"; | ||
+ | |||
+ | # zwischen ' wird nicht extrapoliert -> schneller | ||
+ | |||
+ | print '$a $b'; | ||
+ | print "\n"; | ||
+ | |||
+ | # mit dem . werden strings konkateniert | ||
+ | |||
+ | print $a+$b ."\n"; | ||
+ | |||
+ | # Variablen in perl haben keinen Typ | ||
+ | |||
+ | $b = 'Haus'; | ||
+ | |||
+ | print "$a $b\n"; | ||
+ | |||
+ | # welche Operationen moeglich und sinnvoll sind, ergibt sich aus dem Kontext | ||
+ | # im folgenden Beispiel ist eine Addition mit einem string nicht sinnvoll -> | ||
+ | # $b wird als 0 interpretiert | ||
+ | |||
+ | print $a+$b . "\n"; | ||
+ | </code> | ||
+ | |||
+ | ==== arrays ==== | ||
+ | |||
+ | <code> | ||
+ | use strict; | ||
+ | use warnings; | ||
+ | |||
+ | my @feld; | ||
+ | my $eingabe = ''; | ||
+ | # while ($eingabe ne "ende") { | ||
+ | while (1) { | ||
+ | $eingabe = <STDIN>; | ||
+ | chomp($eingabe); | ||
+ | last if ($eingabe eq 'ende'); | ||
+ | push (@feld, $eingabe); | ||
+ | } | ||
+ | |||
+ | # pop @feld; | ||
+ | |||
+ | my @g = grep {length($_) > 3 } @feld; | ||
+ | |||
+ | my @m = map { ">$_<" } @feld; | ||
+ | |||
+ | print "@m \n"; | ||
+ | print "@g \n"; | ||
+ | my @sfeld = sort @feld; | ||
+ | print "Ausgabe:\n"; | ||
+ | |||
+ | my $i; | ||
+ | foreach my $element (@feld) { | ||
+ | $i++; | ||
+ | printf("%d Element: %s\n", $i, $element); | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ==== Kontrollstrukturen ==== | ||
+ | |||
+ | <code> | ||
+ | ### kontrolstrukturen.pl | ||
+ | while ($eingabe ne "END") { | ||
+ | print "Eingabe : "; | ||
+ | $eingabe = <STDIN>; | ||
+ | # der Befehl chomp arbeitet direkt auf dem string und returniert nicht den abgeschnittenen string! | ||
+ | # man muss dann auch die Abbruchbedingung modifizieren | ||
+ | chomp($eingabe); | ||
+ | push (@feld,$eingabe); | ||
+ | } | ||
+ | |||
+ | # Spezielle Variablen - zB $" bestimmt das Trennzeichen bei Arrayausgabe | ||
+ | |||
+ | # push, unshift, shift, pop (splice kommt spaeter) | ||
+ | |||
+ | pop @feld; | ||
+ | |||
+ | $" = "\n"; | ||
+ | print "@feld\n"; | ||
+ | |||
+ | |||
+ | # for schleifen kommen in perl weniger oft vor als in anderen Programmierensprachen | ||
+ | # weil es effektiver Methoden zur Iteration ueber Arrays gibt | ||
+ | # in der Variable $#feld steht der Index des letzten array Elements | ||
+ | # wichtig obwohl @feld[index] auch funktioniert, ist es eigentlich falsch, da der @ immer | ||
+ | # den Listenkontext anzeigt, meint man lediglich ein einzelnes Element eines arrays, ist die richtige | ||
+ | # Notation $feld[index] | ||
+ | |||
+ | for ($i = 0; $i <= $#feld; $i++) { | ||
+ | print "$i. $feld[$i]\n"; | ||
+ | } | ||
+ | |||
+ | # perl array sind sehr speichereffizient, und beduerfen ebenfalls keiner Initialisierung | ||
+ | # zB kann man ohne Probleme $feld[100000] = 'Bla' schreiben und es werden keine 100000 "Speicherplaetze" | ||
+ | # alloziert - wieviel Speicher braucht eine Variable wirklich? | ||
+ | </code> | ||
+ | |||
+ | ==== Lottozahlen ==== | ||
+ | |||
+ | <code> | ||
+ | for ($i = 1; $i<= 45; $i++) { | ||
+ | push(@seed, $i); | ||
+ | } | ||
+ | |||
+ | for ($j = 45; $j > 39; $j--) { | ||
+ | $zuf = int( rand()*$j ); | ||
+ | $zahl = splice (@seed, $zuf, 1); | ||
+ | print "$zahl \n"; | ||
+ | } | ||
+ | </code> |