Textverarbeitung mit Perl

Perl Praxis 2

In dieser Übung geht es um den Gebrauch von Nummern und Zeichenketten, numerischen und binären Operatoren und den print Operator. Ausserdem wird folgendes thematisiert: 1) Anwendung von Programm auf einen Dateinamen; 2) Konditionale (if-else-elsif), 3) Kontrolstrukturen (while).


In der letzten Übung haben wir ein ganz einfaches Programm kennengelernt, dass "Hallo Welt" drucken konnte. Mit dem Konkatenationsoperator . kann dieses Resultat auch auf andere Weise erzielt werden.

Konkatenation
#!/usr/local/bin/perl
#welt.pl

#simple concatenation
print "Hallo" . "Welt";               #Output 

Übung 2.1. Kopiere oder tippe das Programm in einen Editor und probiere es aus.
Übung 2.2. Ändere das Programm so, dass ein Leerzeichen (erzielt durch ' ') zwischen den Worten steht.
Übung 2.3. Ändere das Programm weiter, so dass ein Zeilenumbruch hinter Welt eingesetzt wird.


Perl Automatik

Perl beschliesst automatisch, ob das vorgefundene eine Nummer oder eine Zahl sein muss (kontextbedingt).

Übung 2.4. Nimm das multiply.pl aus der letzten Übung und gib die folgenden Werte ein: 12 und 3. Das Resultat dürfte nicht überraschend sein. Nun probier es stattdessen mal mit 12fred34 und 3 aus. Was passiert jetzt?


Rechnen
#!/usr/local/bin/perl
#multiply-add.pl

print "Bitte gib eine erste Zahl ein: ";
$num1 = <STDIN>;                  #Wert von Variable ist standard input


print "Bitte gib eine zweite Zahl ein: ";
$num2 = <STDIN>;                 #Wert von Variable ist standard input

print "Bitte gib noch eine letzte Zahl ein: ";
$num3 = <STDIN>;                 #Wert von Variable ist standard input

chomp($num1);                       #entferne \n vom Input
chomp($num2); 
chomp($num3); 

#drucke Resultat 
print "Die ersten beiden Zahlen addiert sind " , $num1 + $num2 , "\n"; 
print "Multipliziert mit der dritten Zahl ergibt das ", $num1 + $num2*
  $num3, ".\n";   

Dieses Programm nimmt drei Inputs an (nacheinander), verstaut sie in Variablen, entfernt jeweils den Zeilenumbruch (\n) und addiert und multipliziert dann die Werte.

Übung 2.5. Tippe das Programm ein und probiere es mit den Nummern 3, 3 und 2 aus. Das Programm liefert nicht das richtige Resultat. Repariere das Programm, so dass es das richtige Resultat liefert.


Mehr Rechnen

Wir nehmen jetzt mal das Programm name2.pl von der ersten Übung.
#!/usr/local/bin/perl
#name2.pl

print "Wie heisst Du? ";
$name = <STDIN>;            #Wert von Variable ist standard input
chomp($name);                     #entferne \n vom Input
$size = length($name);             #Laenge der Zeichenkette
print "\nHallo, $name!\n";        
print "Dein Name hat $size Buchstaben.\n";

Übung 2.6. Ändere das Programm ab, so dass es den Benutzer nach Namen, Alter, Wohnort und dem jetzigen Jahr abfragt. Das Programm sollte folgendes ausgeben: das Geburtsjahr des Benutzers und die gesamte Anzahl der Buchstaben, die in Namen und Wohnort enthalten sind. Um das zu lösen sollten entweder numerische Operatoren oder binäre Operatoren benutzt werden.


Eine erste if Kontrollstruktur
#!/usr/bin/perl
# string comparison


print "Wo wurdest du geboren?\t";
$bplace =  <STDIN>;                  #Wert von Variable ist standard input

print "Wo wohnst du jetzt?\t";
$live =  <STDIN>;                  #Wert von Variable ist standard input


chomp($bplace);                       #entferne \n vom Input
chomp($live);                       #entferne \n vom Input

if ($bplace lt $live) {
    print "Die alphabetische Ordnung ist: $bplace\t$live.\n";
}

Übung 2.7. Kopiere oder tippe das Programm in einen Editor und führe es aus.
Übung 2.8. Im Augenblick tut das Programm nichts, wenn der Geburtsort nicht im Alphabet vor dem Wohnort kommt. Ändere das Programm, so dass es auch einen Output gibt, wenn der Geburtsort im Alphabet nach dem Wohnort kommt (mittles if-else).
Übung 2.9. Modifiziere das Programm weiter, so dass das Programm die Anzahl der Buchstaben in Geburtsort und Wohnort vergleicht und erst das längere Wort ausgibt, gefolgt vom kürzeren Wort.
Übung 2.10. Was passiert wenn die Worte gleich lang sind oder mit dem gleichen Buchstaben anfangen? Modifiziere das Programm, so dass dann auch etwas sinnvolles als Output ausgegeben wird.


Bitte die Übungen bei Anja Leiderer einreichen!

Ende