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 = <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);
}
Kontrollstrukturen
### 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?
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";
}