Partnerlinks:
Google

www.linux-club.de/ sehr aktives und kompetentes Board m. Fragen u. Antworten rund um Linux  |  www.linux-board.de/ privates Board m. Fragen u. Antworten rund um Linux  |  meybohm bei viando.de gute Tools - u.a. "Phase 5 / HTML Editor" mein Lieblings-HTML-Editor und "Proton" - guter Texteditor www.meybohm.de  |  Wunsch-Domain schon belegt? Hier finden Sie sie trotzdem!   |  Webhosting beim Testsieger 2007. www.greatnet.de  | 
Host Europe - World Class Internet Hosting
 

  Ein Pinguin-Logo    
news About Me linux referenz tips links downloads kontakt
 
News
About
Linux
Referenz
Tips
  Linux
  Sicherheit
  Perl
  Allround Server
  Fileserver Samba
  HTTP-Server
  Zope-Server
  SQL-Server
  Mail-Server
  Proxy_Server
  FAX-Server
  Netzwerk-Tools
  SMS-Tools
  Postscript
  MS Office
Links
Downloads
Kontakt

Besucher
seit 21.10.2002
 
Mein Gästebuch
 

Perl - die Programmiersprache für Web-Anwendungen

Mein kleines Perl-Tutorial

1. Intro - oder der Beginn aller Fehler

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:
    1. cgi-bin Verzeichnis über Samba für den/die Programmierer zum Schreiben freigeben
    2. 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)
    3. 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. Das erste Script

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

2.2. "FirstScript.pl" - jetzt wirds interaktiv

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

2.3. "FirstScriptWeb.pl" - jetzt gehts zum Browser

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

2.3. "Date_Script.pl" - Geben wir mal das Datum aus

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

   
Perl-Tutorial (1)
Intro
Das erste Script
Das zweite Script
1. WebScript
Datum ausgeben
Perl-Tutorial (2)
Grundlagen
Scalar
Array
Hash
Referenzen
 
©  09.09.2009  Heiko Teichmeier - Glauchau/Sa.