| Perl läuft ausgezeichnet auf allen gängigen Betriebssystemen, insbesondere auf Linux und Windows. Darüber hinaus ist Perl für den privaten Gebrauch kostenlos verfügbar, und in jeder ernsthaften Linux-Distribution enthalten. | Diese Eigenschaften legen es nahe, System-unabhängige Programme mit Perl zu erstellen. Auf dieser Seite finden sie Hinweise zu den geringen System-abhängigen Unterschieden und zur unabhängigen Programmierung. |
Perl
|
Scripts für CGI und Systemverwaltung |
| Installation | Installation von Perl auf Linux und Windows. |
| Shebang | Die erste Zeile bestimmt das Programm |
| Umgebungs-Variable | Erkennen der Umgebung |
| Zeilen-Separator | 'Neue Zeile' mit #0A (Linux) oder #0D0A (Windows) |
| Pfad-Separator | Standard "/" oder "\" (Windows) |
| Spezifische Teile | Auslagerung in externe Module |
| Win-Registry | Zugriff auf die Registry Datenbank |
| Perl Module | Zusatz-Module zur Systemverwaltung |
Installation, Konfiguration und Test von Perl |
|
Standard auf LinuxPerl ist selbstverständlicher Bestandteil aller gängigen Linux-Distributionen und wird normalerweise gleich zusammen mit dem System installiert und konfiguriert.Auf SuSE-Linux finden sie Perl in der Software-Paketgruppe |
Manuell auf WindowsM$ betrachtet Perl vermutlich als unliebsame Konkurrenz zu eigenen Entwicklungen. Perl ist in praktisch allen Belangen überlegen: ausgereift, gut dokumentiert, portabel und kostenlos. Das dürfte der Grund sein, warum Perl in keinem Original M$-System installiert ist. Man muss Perl selbst installieren und konfigurieren - aber das zahlt sich aus !♦ Details zur Installation von Perl auf Windows. |
Test:Wenn Perl richtig installiert ist, dann meldet sich der Perl-Interpreter (Ausführungs-Programm für Perl Script-Programme) direkt auf der System-Konsole.Auf Linux öffnen sie ein Shell-Fenster und geben ein:
# perl -v
Auf Linux funktioniert das praktisch immer, da Perl in allen gängigen
Linux-Distributionen bereits installiert ist.
# perl -version # perl -help |
Auf Windows öffnen sie ein Konsolen-Fenster (Programm 'Eingabeaufforderung' bzw. cmd.exe )und geben ein:
C:\> perl -v
Auf allen Systemen erhalten sie bei korrekter Installation einen Meldungstext mit
Angaben zur Version sowie die Hilfe zu Konsolen-Befehlen.C:\> perl -version C:\> perl -help Wenn sich Perl nicht meldet, dann versuchen sie es mit dem kompletten Pfad zum Programm, z.B.
C:\> c:\programme\perl\bin\perl.exe -v
Wenn nur diese Version funktioniert, dann ist Perl richtig installiert,
es fehlt jedoch noch die Einstellung der System-Variablen PATH.C:\Programme\Perl\bin> perl.exe -v ♦ Details dazu auf WAMP-Perl. |
Test-Programm:Wenn der Perl-Interpreter (Test oben) funktioniert, dann können sie einzeilige Perl-Programme mit dem switch -e (execute) direkt auf der Konsole ausführen.Der Befehl muss in " " stehen. Da die Win-Konsole weitere " oder ' nicht immer richtig interpretiert, verwendet man die Funktion q(). Auf Linux funktionieren beide Varianten. |
Einzeiler-Test auf der Konsole: Linux
# perl -e "print 'Hier ist Perl\n';"
oder auf Windows
# perl -e "print q(Hier ist Perl\n);" C:\> perl -e "print q(Hier ist Perl\n);"
Der Perl-Interpreter sollte mit der Ausgabe des Textes auf der Konsole antworten.
|
Test-Programm-Datei:Erstellen sie eine Text-Datei test.pl mit dem rechts gezeigten Inhalt (beginnend mit #! )Sie enthält ein einfaches, aber komplettes Perl Script-Programm. |
Datei test.pl
#!/usr/bin/perl
print "\n Hier ist Perl ! \n";
|
Linux:Speichern sie die Test-Datei in einem home-Verzeichnis, z.B. /home/test/test.plÖffnen sie eine (shell)-Konsole und befehlen sie # /home/test/test.pl
|
Windows:Speichern sie die Test-Datei in einem beliebigen Verzeichnis, z.B. C:\test.plÖffnen sie eine (cmd.exe)-Konsole und befehlen sie C:\> c:\test.pl
oder (wenn erfolglos)
C:\> perl c:\test.pl
oder mit dem kompletten Pfad zum Perl-Interpreter
C:> c:\programme\perl\bin\perl.exe c:\test.pl
|
| In jedem Fall sollte der Text Hier ist Perl angezeigt werden. | ♦ Details zu Win-Problemen und Tipps zu ihrer Behebung auf der Seite WAMP-Perl. |
#!Shebang |
|
|
Die Zeichen-Konbination #!
am Anfang (!) einer Text-Datei wird u.a. auch "shebang"
genannt. Anschließend wird der Pfad zum ausführenden Programm eingefügt. Sie ist in vielen Linux-Text-Dateien als erste (!) Zeile enthalten. Daraus erkennt das Linux-Betriebssystem, mit welchem Programm diese Datei ausgeführt werden soll. Diese Methode erfordert keine eigene Organisation, ist voll transparent und erlaubt es, für jede beliebige Text-Datei das Zielprogramm, Switches oder Argumente anzugeben. Unabhängig davon lässt sich jede Datei natürlich auf Wunsch mit anderen Programmen (z.B. mit einem Editor) öffnen. |
Perl-Scripts beginnen auf Linux normalerweise mit der Zeile
#!/usr/bin/perl
Damit wird der Pfad zum Perl-Interpreter auf Linux bezeichnet.
# Perl-Kommentare beginnen mit "#"
# Die Shebang-Zeile wird von perl.exe ignoriert # so wie jede andere Kommentarzeile. |
| Auf Windows wird die shebang-Zeile vom Betriebssystem ignoriert, sie können daher portable Perl-Scripts für Perl-Programme immer mit der oben angegebenen Linux-shebang-Zeile erstellen. | Das oben angegebene Test-Script test.pl kann daher sowohl auf Linux als auch Windows verwendet werden. |
|
Bei Verwendung als CGI-Programm müssen
Perl-Scripts jedoch auch auf Windows den shebang enthalten.
Windows-Perl-CGI-Scripts beginnen mit dieser Zeile:
#!c:\perl\bin\perl.exe
oder mit
#!c:\programme\perl\bin\perl.exe
Damit bezeichnen sie den Pfad zum Perl-Interpreter-Programm perl.exe .
Ändern sie diese Angabe, wenn ihr Perl-Interpreter an anderer Stelle installiert wurde.
|
Sie erstellen daher portable Perl-CGI-Programme zweckmäßig mit diesen
beiden Anfangszeilen. Je nach Betriebssystem müssen sie die beiden Zeilen
austauschen:
#!/usr/bin/perl
#!c:\perl\bin\perl.exe ♣ Tipp: Ein praktisches Tool für die Vertauschung können sie in Perl leicht selbst programmieren. |
Umgebungs-Variable |
|||||
|
Jedes Betriebssystem bietet den darauf laufenden Programmen Daten zur
aktuellen 'Umgebung' an. Perl-Programme können diese Daten lesen und entsprechend darauf reagieren. |
Damit können sie eigene Programme an kleine System-Unterschiede anpassen: Der Hauptteil des Perl-Programms kann meist unabhängig vom System erstellt werden. An kritischen Stellen verzweigt man in mehrere Äste, je nach dem Ergebnis der Abfrage einer Umgebungs-Variablen. | ||||
| Details zu Umgebungs-Variablen finden sie auf der Seite 'Perl-Umgebung'. |
Ein Beispiel ist die Umgebungs-Variable PATH Sie enthält auf jedem System eine Liste von Pfaden, in welchen das System nach ausführbaren Programmen sucht.
|
||||
Zeilen-Separator |
|
|
Ein kleiner Unterschied betrifft Text-Dateien und damit auch die Quelltexte von
Perl-Scripts: Auf Linux beginnt eine neue Zeile mit dem Zeichen (hexadezimal) #0A bzw. (dezimal) 10. oder (maskiert) \n. |
Windows verwendet für den gleichen Zweck die beiden
Zeichen #0A0D bzw. 10.
und 13. oder (maskiert) \r\n Die beiden Zeichen sind auch unter ihren Namen linefeed (LF) bzw. carriage return (CR) bekannt. |
|
Auf Windows laufen erfahrungsgemäß Dateien mit #0A
ebenso wie solche mit #0A0D als Zeilen-Separator. Es ist daher empfehlenswert, Perl-Quelltext auf Linux anzulegen. Das Script läuft dann problemlos auf allen Systemen (saubere Programmierung vorausgesetzt). |
Manche Linux-Versionen haben Probleme mit dem Windows-Separator #0A0D
und ergeben damit Fehlermeldungen wie
z.B. bad interpreter: no such file or directory Abhilfe bieten verschiedene Methoden (ausprobieren): Manchmal genügt schon das Öffnen der Quelltext-Datei mit einem Text-Editor und erneutes Speichern. Man kann auch eine leere Linux-Text-Datei erzeugen, mit Editor öffnen und den Inhalt der Quelltext-Datei hineinkopieren. Es gibt auch eigene Filter-Programme zur Umwandlung der Zeilen-Separatoren. |
|
Hier ein kleines Perl-Programm (vereinfacht, ohne Gewähr) zur Umwandlung der
Zeilen-Separatoren. Die zu filternde Quelltext-Datei wird als Parameter angegeben. Das Programm ist natürlich System-unabhängig . . Bedienung, z.B. zur Umwandlung einer Datei test.pl: # ./line_sep.pl home/test/test.pl
oder auf Windows:
C:\> line_sep.pl c:\test.pl
♦ Details dazu auf der Seite Datei-IO mit Perl und bei den Regulären Ausdrücken. |
# Datei linesep.pl
$path=$ARGV[0];
# Datei lesen
open(READ1,$path);binmode READ1; {
local $/ = undef;
}$datei = <READ1>; close READ1; # Datei umwandeln
$datei=~s/\r\n/\n/g;
# Datei schreiben
open(WRITE1, "> $path");binmode WRITE1; print WRITE1 $datei; close WRITE1; |
Pfad-Separator |
|
|
Eine (absolute) Pfad-Angabe umfasst den Dateinamen einer Datei, sowie alle
Verzeichnisse und Sub-Verzeichnisse, welche dabei durchlaufen werden müssen.
Die Namen der hierarchischen Ebenen werden mit einem Trennzeichen getrennt.
Standard dafür ist der Schrägstrich (Slash / ).
M$ verwendet aus einem unbekannten (jedoch vielfach verfluchten) Grund für
lokale Pfade den umgekehrten Schrägstrich
(Backslash \ ), für Internet-Pfade allerdings das
Standard-Zeichen / . Achtung - dieses Zeichen muss im Quelltext
mit einem zusätzlichen \ maskiert werden ! Wenn sie in Perl-Programmen den Pfad-Separator je nach System umschalten wollen, dann bieten sich dazu mehrere Wege an: Man kann z.B. aus der vordefinierten Variablen $^O das Betriebssystem entnehmen und danach entsprechend verzweigen. Man kann z.B. die Umgebungsvariable PATH analysieren und danach verzweigen. |
$sep = "/";
if($^O=~m/Win/) { $sep = "\\";
}if($ENV{'PATH'}=~/.:\\/) { $sep = "\\";
}
|
|
|
# Linux:
$path="/home/test/test.pl";
# Windows:
$path="c:/test/test.pl";
|
| Wenn man Pfad-Texte allerdings in Windows Systembefehlen verwenden will, dann muss man alle / Separatoren für den Befehlstext $cmd in \ Backslash umwandeln. Das Beispiel zeigt, wie man das mit einem Regulären Ausdruck machen kann. |
$from = "c:/test/abc.dat";
$to = "d:/neu.dat"; $cmd = "copy $from $to"; $cmd=~s/\//\\/g; $r = system($cmd); |
Spezifische Teile- Auslagerung in externe Module |
|
| Die Funktion, welche ein Programm ausführen soll, gibt es normalerweise in jedem Betriebssystem (z.B. Datei öffnen, lesen, analysieren usw). Ein besonderer Fall ist das 'User-Interface' - die Bedienungs-Oberfläche - welche in den meisten Systemen unterschiedlich zu programmieren ist. Moderne Programme weichen diesem Problem möglichst aus und verwenden z.B. Webseiten als User-Interface. Analog sollten sie versuchen, bei der Programmierung alle System-Besonderheiten zu umgehen, und an deren Stelle unabhängige Standards zu verwenden. |
In ganz seltenen Fällen müssen sie allerdings System-spezifische
Funktionen verwenden: Wenn diese spezifischen Teile klein sind, dann werden sie mit Verzweigung (if..) in ein größeres Programm integriert. Wenn die spezifischen Teile umfangreich sind, dann sollten sie diese als eigene Dateien auslagern und je nach System einbauen. |
|
Perl bietet zur Einbindung externer Quelltext-Dateien *.pm
mehrere Möglichkeiten: Verwenden sie in 'gewöhnlichen'
Fällen do oder require Für 'echte' Funktions-Module ist use reserviert. Konsultieren sie Manual und Internet, um Details zur Anwendung zu erfahren. |
$extdat="/home/test/modul_a.pm";
# use modul_a;
do $extdat;
# require $extdat;
|
| Ein besonderer Fall ist der Zugriff auf die Win Registry Datenbank. Dort werden zahlreiche wichtige Daten von System und Programmen verwaltet. Nach Gewohnheit des Herstellers sind die Daten nicht einfach zugänglich sondern erfordern eigene Programme zum Lesen und Ändern. | Perl bietet ein eigenes Modul für den Zugriff auf die Registry Datenbank. |
|