Perl - die Programmiersprache für Web-Anwendungen
Mein kleines Perl-Tutorial
1.1. "Was soll das?"
Hier versuche ich mal ein paar meiner Schritte beim Erlernen der Programmier-Sprache Perl
wiederzugeben, vielleicht hilft das anderen Anfängern (wie ich auch noch einer bin) .-) das ganze
etwas leichter zu begreifen, ja - evtl. sagt man "Ja genau hier bin ich auch gestolpert". In
diesem Sinne - laßt uns anfangen!
1.2. Was ist Perl?
Perl ist eine sogenannte "interpretierende" Scriptsprache. Was bedeutet denn das schon wieder?
interpretierend: die von euch mühsam geschriebenen Programme werden nicht von einem Compiler
"zerhackt" und "verdreht", daß man sie nicht mehr lesen kann, nein sie bleiben so schön wie
ihr sie hingekriegt habt. Perl liest dann während der Ausführung die Klartext-Scripte und
Kompiliert sie bloß intern zur eigenen Verwendung. Dadurch sind solche Programmiersprachen
(auch PHP) etwas langsamer als C/C++ u.ä., aber schöner anzuschaun und einfacher zu ändern.
Die Vorteile von Perl liegen in der sehr guten Manipulierbarkeit von
Strings
deshalb sind sehr viele Webanwendungen unter Verwendung von Perl entstanden. Hier müssen ja auch viele
Zeichenfolgen ausgewertet, verarbeitet und umgewandelt werden um z.Bsp. Datenbankabfragen aufzubereiten
oder Eure Meinung vom Eingabeformular zum Empfänger zu bringen - und dann noch auszuwerten wie viele
Leute denn auch der Meinung der Meinungsforscher sind.
Ein weiterer Vorteil ist das leichte Einbinden von neuen Modulen in Perl. Erstens kann man
leicht eigene Module schreiben (die dann von vielen Scripten genutzt werden können) und desweiteren
stehen im Internet hunderte von solchen nützlichen und stets aktuellen Erweiterungen bereit.
So kann man sein Perl um "märchenhafte" Eigenschaften erweitern.
1.3. Wo läuft Perl?
Perl entstand im Linux-Umfeld (läuft also auf allen Linux-Distributionen) wurde dann aber auch
auf Windows portiert und läuft dort auch sehr gut. Andere OS's (Operating System) weiß ich nicht.
Es kann als normales Shell-Script (auf der Kommandozeile) laufen oder auch als CGI-Script (hier
wird dann mit einem
HTTP-
Server,
einem Browser
und HTML-Seiten
zusammengearbeitet).
Perl Scripte startet man entweder mit: "[evtl. path/]perl sript_name" oder durch
einfachen Aufruf des Programmnamens (evtl. mit Übergeben von Werten). Dazu muß dann der Verweis
auf den Installationsort des Perl-Interpreters im Kopf der Datei stehen. Außerdem muß das
Betriebssystem darauf eingerichtet sein.
1.4. Wie bearbeite ich meine Scripte?
Grundsätzlich gilt: "Du brauchst nur einen 'einfachen' Texteditor." Jetzt noch die Feinheiten:
der Editor sollte wenigstens Syntax-Highlighting haben.
- Bearbeitung unter Linux mit "vi", "vim", "jo", "emacs", dem MC (MidnightCommander - bald
besser als das Original) oder was es sonst noch so gibt.
- Unter Windows mit "Notepad"???, "Textpad":-), "Proton" usw.
- Unter Windows für Linux:
- cgi-bin Verzeichnis über Samba für den/die Programmierer zum Schreiben freigeben
- Mit Textpad o.ä. die Files editieren (Achtung: Abspeicherung im Unix-Format muß möglich sein,
sonst streiken dann die Scripte, das schränkt die Auswahl an Editoren etwas ein)
- Nach dem ersten Speichern die Rechte setzen: Ausführen für alle/oder gruppe (nogroup),
zum Zugang auf die Linux-Maschine einen ssh- oder Telnet-Client benutzen oder direkt auf dem
Rechner (wenn er in der Nähe steht)
- Nach meiner Erfahrung bleiben die Recht dann bei den nächsten Speicherungen erhalten
1.5. Weitere Eigenschaften?
Perl ist eine schwach typisierte Programmiersprache, d.h. Variablen müssen nicht unbedingt
vorher definiert werden (was aber schon mal Probleme mit sich bringt). Ihnen muss nicht zwingend
ein Datentyp zugewiesen werden, sie werden zu dem Typ der Ihnen mit einem Wert zugewiesen wird.
Außerdem können sie während der Verwendung ihren Typ ändern. So wird z.Bsp. aus einem Buchstaben
der irgendwo mit einem "Plus" "+" verknüpft wird ein Zahlenwert, und somit undefiniert.
Perl denkt es hat eine Zahl vor sich bloß die Zahl "Buchstabe" hat ja keinen numerischen Wert.
1.6. Scalare, Arrays, Hashes und andere Spezies
Datentypen:
Es gibt in den verschiedenen Programmiersprachen bestimmte Grund-Daten-Typen. Hier die wichtigsten
die mir gerade noch einfallen:
- Value, Zahl (dürfte wohl jedem klar sein)
- String (kann eine wilde Ansammlung von Zeichen sein - oder auch sinnvolle, Wörter z.Bsp.)
- "$" - Scalar (eine Zeichenkette in der, durch die Kommas getrennt, andere Zeichenketten
gespeichert werden, deshalb dürfen auch keine Kommas in den gespeicherten
Zeichenketten enthalten sein), z.Bsp. ("haus,hund,maus 09,jfa9943 0ßs49"), wird benutzt
um Werte an Subroutinen zu übergeben, da Arrays oder Hashes nicht direkt übergeben werden
können - dafür wird mithilfe eines Scalars eine Referenz auf ein Array oder einen Hash
übergeben
- "@" - Array (eine Liste von Werten, z.Bsp. ("haus","hund","maus","aaa443","25--33")
- "%" - Hash (ist eine Liste von Schlüssel=>Wert - Paaren), z.Bsp.
(haus=>boot,
hund=>hütte,
kamm=>haar)
2.1. "Hello World!" - was sonst
Wie jeder andere fange ich mit diesem "weltläufigen" Programm an:
#!/usr/bin/perl -w
#
# im Normalfall alles (außer die erste
# Zeile) mit dem "#" ist ein Kommentar
#
$strin="Hello World!\n"; # "\n" erzeugt Zeilenumbruch
print $strin; # print gibt den String auf STDOUT
# (hier das virtuelle Terminal auf
# dem du arbeitest [tty1 o.ä.]) aus
|
Als Ausgabe erscheint nun "Hello World!". Das war schon unser erstes Script. Sollte
das Script nicht reagieren gibt es mehrer mögliche Fehlerquellen:
- wenn man als "root" arbeitet (was man eigentlich nur selten machen solte) und in das Verzeichnmis mit
dem Script gewechselt ist muß das script mit einem Punkt vor dem Pfad aufgerufen werden.
Sicherheit des Systems!!!"./". Ansonsten mit voller Pfadangabe.
Außerdem muß das script ausführbar sein - "x" muß gesetzt sein. Das kann man mit:
"chmod u+x /pfad/dateiname" erledigen. Dann muß der aufrufende Benutzer auch der Eigentümer der
Datei sein.
Benutzt man Linux oder andere Unixe muß man auf die Groß- und Kleinschreibung achten, da diese
Betriebssysteme (im Gegensatz zu Windows) "casesensitiv" sind, d.h. sie unterscheiden zwischen
Groß- und Kleinschreibung.
Nun schauen wir uns die Elemente des Scripts mal an:
#!/usr/bin/perl # Pfad zum Perl-Interpreter
# (bei Windows: C:\...\perl.exe)
-w # Option zum Starten von Perl -
# bewirkt mehr Fehlerausgaben
$ # --- aaahhh das kennen wir ja - ein Zeichen
# für eine Scalare Variable (hier wird
# in diese ein String (Zeichenkette)
# eingelesen)
Script-Download
Das nächste Script nimmt schon eine Benutzer-Eingabe entgegen und reagiert darauf. Hier folgt wieder
der Sourcecode mit ein paar Erklärungen:
#!/usr/bin/perl -w
#
#####################
# firstScript.pl
###
#
use strict; # legt fest, daß alle Variablen
# explizit mit "my" oder "locale"
# initialisiert werden müssen,
# sonst kommt es zum Abbruch des Programms.
my $in;
print <<BLOCK;
Hallo, ich bin das Script: $0
und werde vom Perl-Interpreter: $^X
Version: $]
auf dem Betriebssystem: $^O ausgeführt
... und wer bist du?
BLOCK
$in = <STDIN>;
chomp $in; # chomp schneidet Newline-Zeichen
# (Zeilenumbruch)"\n" am Ende ab
print "Hallo $in, viel Spaß mit Perl!\n";
Die Konstruktion print <<BLOCK weist an, das alles
folgende bis zum nächsten BLOCK mit der Funktion print ausgegeben werden soll.
Reservierte Variablen:
$0 - beinhaltet den Scriptnamen des aufgerufenen Scriptes,
$] - gibt die Perl-Version aus,
$^O - gibt das Betriebssystem aus
"<STDIN>" [ist die StandardEingabe], von hier holt
das Script seine Daten,
Script-Download
Dieses Script muß im sogenanten "cgi-bin"-Pfad des Webservers (bei Linux meist "Apache") liegen
und als ausführ- und lesbar für den User und die Gruppe unter der Apache läuft sein. Apache läuft
meist als user "wwwrun" und gruppe "nogroup".
Bei SuSE-Linux liegt der cgi-bin-Pfad meist unter: /usr/local/httpd/cgi-bin.
Hier müssten dann alle cgi-Scripte hinterlegt werden, die man von einer Webseite ausführen
lassen will.
Das Problem mit virtuellen Hosts kommt demnächst mal im Apache-Tutorial mit dran.
Hier nun der Code des Scriptes "FirstScriptWeb.pl".
#!/usr/bin/perl -w
#
##########################
# firstScriptWeb.pl
####
#
print "Content-type: text/html\n\n";
use strict;
my $in;
print <<BLOCK;
Hallo, ich bin das Script: $0
und werde vom Perl-Interpreter: $^X
Version: $]
auf dem Betriebssystem: $^O ausgeführt
... und wer bist du?
BLOCK
$in = <STDIN>;
chomp $in;
print "Hallo $in, viel Spaß mit Mod-Perl!\n";
Man kann zur Kontrolle dieses Script auf der Kommandozeile aufrufen und erhält die Ausgabe
auch hier zurück. Ruft man das Script nun im Browser auf kann man keine Eingabe machen, bekommt
aber schon eine Ausgabe des formatierten Textes.
Script-Download
Jetzt lassen wir uns mal das aktuelle Datum im Browser ausgeben: "http://test-site/cgi-bin/date_script.pl".
Dazu genügen folgende Zeilen Code:
#!/usr/bin/perl -w
# date_script.pl
print "Content-type: text/html\n\n";
use strict;
$|=1;
print <<BLOCK;
<html>
<head>
</head>
<body>
Das ist ein test mit date<br>
BLOCK
system("/bin/date");
print <<BLOCK;
\n<br>Das wars schon<br>
</body>
<html>
BLOCK
Das wars eigentlich schon und ihr könnt nun mal selbst ein bißchen probieren.
Script-Download
|