==== Scalare ==== [[sparse_array.pl]] # 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"; ==== arrays ==== use strict; use warnings; my @feld; my $eingabe = ''; # while ($eingabe ne "ende") { while (1) { $eingabe = ; 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); } ==== Kontrollstrukturen ==== ### kontrolstrukturen.pl while ($eingabe ne "END") { print "Eingabe : "; $eingabe = ; # 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? ==== Lottozahlen ==== 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"; }