Sehr Umfangreiche Webseite zum Programmieren in C Perl CGI, Skripting, Linux, SystemprogrammierungPerl Kurs Skripting print Skalare chomp printf Selektion chop Anweisungen Ausdrücke Operatoren Arithmetisch Perl Skalare Variablen chomp chop print printf Ausdrücke Anweisungen Operatoren Arithmetisch Selektion Perl Kurs Kapitel 3

3.1. Skalare Variablen           zurück Ein Kapitel tiefer zum Inhaltsverzeichnis

Eine Variable ist ein Wert, den man im Laufe eines Skripts verändern kann. Der Perl-Interpreter reserviert für jede Variable Platz im Arbeitsspeicher. Wenn Sie mit einer Variable arbeiten wollen, müssen Sie diese Einrichten. Dies geschieht in dem Sie Ihrer Variablen einen eindeutigen Namen geben. Zum Beispiel ...

#!/usr/bin/perl -w

$zahl = 100;
$string = "hallo";

print $string;
print "\n";
print $zahl;
print "\n";

In diesem Beispiel bekommt die Variable $zahl den Wert 100 und die Variable $string das Wort "hallo" übergeben. Für manch einen, der bereits Programmiererfahren ist,  dürfte dies ein wenig verwirrend sein, da man in vielen Programmiersprachen doch eine Datentyp (char, int, long, double....) und einen Variablennamen benötigte.

In Perl werden Variablen durch voranstellen des Präfixes unterschieden. In unserem Fall ist es der Präfix $. Alle Datentypen die mit dem Präfix $ beginnen, nennt man skalare Datentypen

Und mit Hilfe des Gleichheitszeichen (=) übergeben wir den Variablen den anfänglichen Wert. Bei dem Skalaren Datentyp wären das Zahlen und Strings.

Bitte beachten Sie bei dem Namen den Sie Ihrer Variablen geben darauf, dass Ihre Variable nicht mit einer Zahl beginnt. Weiterhin sollten Sie auf die Gross.-und Kleinschreibung achten ...

#!/usr/bin/perl -w

$zahl = 100;
print $Zahl;

Bei diesem Beispiel wird der Interpreter meckern, da Sie bei der Ausgabe mit print, die Variable nicht so geschrieben haben, wie Sie diese deklariert haben.

Der Vorteil von Perl, dass die Variablen nicht, im Gegensatz zu anderen Programmiersprachen, am Anfang deklariert werden müssen, kann aber auch schnell zum Nachteil werden ...

#!/usr/bin/perl -w

$variable1="Hallo";
$variable2=4711;

print $variable1 . " : ". $variable2 . "\n";

#Viele viele Zeilen weiter....

$variabl2=1111;  #Eigentlich war $variable2 gemeint

print $variabl2 . "\n";

Bei diesem Beispiel haben wir einen Tippfehler gemacht. $variabl2 anstatt $variable2. Um solche Fehler zu vermeiden, können wir die Deklaration am Anfang mittels use strict erzwingen. Die Variable wird dabei mit dem Schlüsselwort my() deklariert ...

#!/usr/bin/perl -w

use strict;

my $variable1="Hallo";
my $variable2=4711;

print $variable1. " : ". $variable2 . "\n";

#Viele viele Zeilen weiter............

$variabl2=1111; #Eigentlich war $variable2 gemeint

print $variabl2 . "\n";

Nun wird der Perl-Interpreter das Programm nicht ausführen und eine entsprechende Fehlermeldung ausgeben.

Funktionen die mehrere Werte zurückgeben, müssen Sie selektieren (zu den Funktionen kommen wir noch). In Perl können Sie dies auch mit normalen Variablen machen ...

#!/usr/bin/perl -w

($a, $b, $c) = (5, 10, 15);
#dasselbe wie $a=5; $b=10; $c=15;

print "$a $b $c\n";

Diese Selektion kann auch noch anders, mit Variablenzuweisungen verwendet werden ...

#!/usr/bin/perl -w

($a, $b, $c) = (5, 10, 15);
#dasselbe wie $a=5; $b=10; $c=15;

($x, $y, $z) = ($a, $c , $b);
#dasselbe wie $x=$a; $y=$c; $z=$b

print "$x $y $z $a $c $b\n";

Selektionen werden auch gerne mit Funktionen der Perl-Bibliothek verwendet ...

#!/usr/bin/perl -w

($a, $b, $c, $d, $e, $f, $g) = localtime(time);
$e=$e+1;
$f=$f+1900;

print "sec:$a min:$b std:$c tag:$d mon:$e jahr:$f wochentag:$g\n";

Hiermit weisen Sie den einzelnen Variablen eine entsprechende Zeitangabe zu. Sind wir an einigen Werten der Zeit nicht interessiert, können Sie diese mit dem undef-Platzhalter ausselektieren ...

#!/usr/bin/perl -w

($a, $b, $c, undef, undef, undef, $g) = localtime(time);

print "sec:$a min:$b std:$c wochentag:$g\n";

Hierbei interessiert uns nicht der Wert vom Tag, Monat und Jahr. Es lässt sich aber auch eine Selektion mit Slices machen ...

#!/usr/bin/perl -w

($a, $b, $c, $g) = (localtime(time))[0,1,2,6];

print "sec:$a min:$b std:$c wochentag:$g\n";

Keine Sorge, zu den Slices kommen wir noch in einem späteren Kapitel.

3.2. Anweisungen und Ausdrücke           zurück Ein Kapitel tiefer Ein Kapitel höher zum Inhaltsverzeichnis

Eine Anweisung haben Sie bereits kennen gelernt. Die print-Anweisung zur Ausgabe eines Textes auf dem Bildschirm. Anweisungen sind nichts anderes als Befehle, die mit einem Semikolon abgeschlossen werden. Folglich ist der Befehl ...

print "Hallo\n";

... eine Anweisung für den Perl-Interpreter "Hallo" auf dem Bildschirm auszugeben. Ein weiteres Beispiel ...

#!/usr/bin/perl -w

$variable = 100;
print $variable;
print "\n";

In der ersten Anweisung, weisen wir den Wert 100 der Variable $variable zu. Als nächste Anweisung geben wir den Wert der Variablen $variable auf dem Bildschirm aus (print). Die letzte Anweisung bringt unseren Cursor an den Anfang der nächsten Zeile.

Ein weiterer häufig verwendeter Begriff sind Ausdrücke. Als Ausdruck bezeichnet man eine Kombination aus Werten und Operatoren ...

$var1=$var1+$var2;
$var3=$var1;
$var3=4*$var1;

Die Ausdrücke stehen in der Rechten Seite von Zuweisungen, Bedingungen oder Funktionen.

3.3. Daten von Tastatur einlesen           zurück Ein Kapitel tiefer Ein Kapitel höher zum Inhaltsverzeichnis

Für den weiteren Verlauf dieses Tutorials benötigen Sie noch eine Möglichkeit für Eingabe von Daten. Die Eingabe erfolgt in Perl über Datei-Handles. In Perl gibt es wie auch in C/C++ etc. vordefinierte Handles. Für die Eingabe von der Tastatur wäre dies der Handle STDIN und für Ausgabe auf dem Bildschirm der Handle STDOUT.

Jetzt benötigen Sie noch einen Datei-Eingabeoperator <> und stellen den Handle STDIN dazwischen (<STDIN>). Um jetzt etwas von der Tastatur einzulesen, gehen Sie wie folgt vor ...

#!/usr/bin/perl -w

$input=0;
print "Bitte eine Eingabe machen : ";
$input=<STDIN>;
print "Sie haben eingegeben : $input";

Anders als in anderen Programmiersprachen müssen Sie die Variable initialisieren. Mit welchem Wert ist im Prinzip egal. Mit ...

$input= <STDIN>;

...weisen Sie der Variablen $input den Wert vom Handle <STDIN> zu. Dies entspricht, wie Sie oben gelesen haben, die Eingabe von der Tastatur. Der Nachteil an dieser Schreibweise ist der, dass hier das Newlinezeichen (\n), womit in die nächste Zeile gesprungen wird, ebenfalls in unseren Variablen $input steht. Da dies meist nicht erwünscht wird, gibt es hierfür die Funktion chomp. Sehen wir uns das Programm mit der Anweisung chomp an ...

#!/usr/bin/perl -w

$input=0;
print "Bitte eine Eingabe machen : ";
chomp($input=<STDIN>);
print "Sie haben eingegeben : $input \n";

Dafür müssen Sie aber jetzt selber dafür sorgen, dass nach der Ausgabe in die nächste Zeile gesprungen wird.

3.4. Daten ausgeben           zurück Ein Kapitel tiefer Ein Kapitel höher zum Inhaltsverzeichnis

Wie man Daten mit print ausgeben kann, haben Sie bereits mehrmals gesehen. Da Sie im Kapitel zuvor gelernt haben, dass man zum Daten einlesen von der Tastatur, den Handle STDIN verwendet, gibt es für die Ausgabe auf dem Bildschirm den Handle STDOUT. Somit könnten Sie die Daten auch mit der Angabe des Handle folgendermaßen ausgeben lassen ...

#!/usr/bin/perl -w
print STDOUT "Eine Weitere Möglichkeit zur Ausgabe\n";

Aber da sowieso meistens etwas auf der Konsole ausgegeben wird, hat man diese Schreibweise so implementiert, damit automatisch auf STDOUT geschrieben wird, sofern nichts anderes Angegeben ist ...

print "Eine Weitere Möglichkeit zur Ausgabe\n";

Kommen wir nun zu den verschiedenen Möglichkeiten, wie Sie mit print Variablen auf dem Bildschirm ausgeben können ...

#!/usr/bin/perl -w

print $variable=100;
print $variable, "\n";
print "Der Wert dieser Variable beträgt ", $variable, "\n";
print "Eine weitere Möglichkeit zu Ausgabe von $variable \n";

Im nun folgenden Skript können Sie alles bisher erlernte in der mal Praxis testen ...

#!/usr/bin/perl -w

$laenge=0;
$breite=0;
$gesamt=0;

print "\nBerrechnung von rechteckige Flaechen\n";
print "---------------------------\n";

print "\n", "Bitte geben Sie die Laenge ein : ";
chomp($laenge=<STDIN>);

print "\n", "Bitte geben Sie die Breite ein : ";
chomp($breite=<STDIN>);

$gesamt=$laenge*$breite;
print "\nDie Flaechen-Berrechnung von $laenge * $breite beträgt $gesamt \n";

Wenn Sie z.B. in diesem Skript 10.55 für die Variable $laenge und und 1.33 für die Variable $breite eingeben, bekommen Sie als Ergebnis 14.0315 zurück. Wenn Sie aber so eine genaue Zahl nicht benötigen, sondern nur die letzten 2 Ziffern nach dem Komma, dann müssen Sie die Ausgabe ander Formatieren. Dafür gibt es die Anweisung  printf. Mit printf sind wir nun in der Lage, Zeichen formatiert auf dem Bildschirm auszugeben. Hierzu ein Überblick, welche Formatbezeichnungen uns dazu zur Verfügung stehen ...

... ändern Sie nun die print-Anweisung, vom Programmlisting zuvor, um in ...

printf "\nDie Flaechen-Berrechnung von %f * %f beträgt %f \n",$laenge,$breite,$gesamt;

Mit den drei Platzhaltern %f werden drei Gleitkommazahlen formatiert auf dem Bildschirm ausgeben. Unsere Variablen stehen am Ende, hinter dem, zwischen Gänsefüßchen stehenden Text, in der selben Reihenfolge wie Sie die Ausgabe auf dem Text haben wollen.

Wenn Sie das Programm jetzt erneut ausführen werden Sie bemerken, dass immer 6 Stellen nach dem Komma mitausgegeben werden. Ob Sie jetzt Gleitkommazahlen oder Ganzzahlen eingegeben haben. Daher benötigen Sie nun eine Formatierungen der Formatbezeichner. Folgende Möglichkeiten haben Sie dazu ...

Verändern Sie nun die printf-Anweisung nochmals ...

printf "\nDie Flaechen-Berrechnung von %.2f * %.2f beträgt %.2f \n"
         ,$laenge,$breite,$gesamt;

Jetzt werden nur noch 2 Stellen nach dem Komma ausgegeben. Was aber nicht heißt, dass unser Ergebnis intern nur noch 2 Stellen nach dem Komma lang ist! Hier geht es nur um die Ausgabe. 

3.5. Mathematische Operatoren           zurück Ein Kapitel tiefer zum Inhaltsverzeichnis

Die 4 Grundrechnungsarten werden in Perl, wie auch in alle anderen Programmiersprachen folgendermaßen dargestellt ...

$var = $a + $b;    #Addition
$var = $a - $b;    #Subtraktion
$var = $a * $b;    #Multiplikation
$var = $a / $b;    #Division

Weitere Operatoren sind ...

$var = $a ** $b;   #Exponent
$var = $a % $b;    #Modulo teilt $a durch $b und
                   #gibt den Rest des Ergebnis aus

Damit lassen sich schon recht praktische Perl-Skripte erstellen ...

#!/usr/bin/perl -w

print "\n", "Stromverbrauch Ihres PC's im Jahr mit Kosten", "\n\n";
print "Wieviel Watt hat Ihr Tower : ";
chomp($watt=<stdin>);

printf "Wie lange ist Ihr PC pro Tag an (Std.) : ";
chomp($hour=<stdin>);

print "Wieviel zahlen Sie pro KWh (Pf.) : ";
chomp($money=<stdin>);

$KWhJahr=($watt/1000) * $hour * 365;
$price = $KWhJahr * ($money/100);

printf "Ihr PC verbraucht im Jahr %.2f KW Strom\n",$KWhJahr;
printf "Das kostet Ihnen %.2f DM oder %.2f Euro im Jahr\n",$price,$price/1.955;

Weitere Operatoren wären zum Inkrementieren (++) und zum  Dekrementieren (--) von Werten. Damit lässt sich der Wert einer Zahl um 1 erhöhen, bzw. verringern. Diese Operatoren werden vorwiegend in Schleifen verwendet ...

$var++;  #Wert von $var wird nach der Anweisung um 1 erhöht (Postfixnotation)
++$var;  #Wert von $var wird sofort um 1 erhöht (Präfixnotation)
$var--;  #Wert von $var wird nach der Anweisung um 1 verringert (Postfixnotation)
--$var;  #Wert von $var wird sofort um 1 verringert (Präfixnotation)

Auch hierzu ein kleines Skript ...

#!/usr/bin/perl -w

$wert = 1;

printf "%d\n",$wert++;   #Ausgabe:1
printf "%d\n",++$wert;   #Ausgabe: 3
printf "%d\n",$wert-- ;  #Ausgabe: 3
printf "%d\n",--$wert;   #Ausgabe: 1

Eine erweiterte Möglichkeit, die Rechenoperatoren dazustellen, ist eine kombinierte Zuweisung ...

$a+=$b;     #gleich wie $a=$a+$b
$a-=$b;     #gleich wie $a=$a-$b
$a*=$b;     #gleich wie $a=$a*$b
$a/=$b;     #gleich wie $a=$a/$b
$a%=$b;     #gleich wie $a=$a%$b
$a**=$b;    #gleich wie $a=$a**$b

Bei Perl gilt intern für alle Rechenoperatoren, außer dem Modulo-Operator (%), das diese mit Gleitkommazahlen rechnen. Aus ...

$var = 5 * 4;

... macht der Perl-Interpreter ...

$var = 5.0 * 4.0;

Sollten Sie aber doch echte Integer-Werte benutzen wollen, so können Sie sich diese mittels ...

use integer;

... erzwingen. Und Umgekehrt, sollten Sie auf keinen Fall mit Integern rechnen wollen benutzen Sie ...

no integer;

Perl beinhaltet ,wie viele andere Programmiersprachen auch, verschieden mathematische Funktionen ...

Wenn Sie weitere Module wie z.B. tan für Tangens benötigen müssen Sie auf das CPAN-Modul ...

Math::Trig

... zurückgreifen. Sollte sich dieses Modul nicht auf Ihrem Rechner befinden, müssen Sie es nachinstallieren. Hier ein Anwendungsbeispiel des Moduls Math::Trig ...

#!/usr/bin/perl -w

use Math::Trig;     #für tan

$var=100;

print sqrt(10), "\n";
print cos($var), "\n";
print tan(5), "\n";