User Tools

Site Tools


kurs:1._einheit

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";
}
kurs/1._einheit.txt · Last modified: 2014/09/10 21:22 (external edit)