Virtual OS/2 International Consumer Education
VOICE Homepage: http://de.os2voice.org
Oktober 2001

[Inhaltsverzeichnis]
[Vorherige Seite] [Nächste Seite]
[Artikelverzeichnis]

editor@os2voice.org


Einstieg in Perl

Von Heiko Korsawe © Oktober 2001

Eine einfache Programmiersprache unter OS/2, mit der man schnell einfache aber auch komplizierte Aufgaben lösen kann, ist sicher für jeden OS/2-Anwender nützlich. Zum Beispiel der Privat-Nutzer, der einfach aus HTML-Dokumenten bestimmte Einträge entfernen will oder Links von Grafiken in HTML-Dokumenten ändern möchte, da er sie lokal gespeichert hat. Man hat vielleicht vor, sich eine Suchen/Ersetzen-Routine über mehrere Texte selbst zu programmieren oder möchte einfach sein OS/2 um eigene Funktionen erweitern. Aber auch zum Ausbau von Web-Seiten oder eines Web-Servers ist Perl nützlich. Ein großer Vorteil hierbei: Perl existiert für sehr viele Betriebssysteme (Linux, Unix, OS/2, DOS, Windows), somit lassen sich Programme und die erworbenen Kenntnisse auch auf anderen Plattformen einsetzen.

Dieser Beitrag soll Interessierten einen kleinen Einblick in die Perl-Programmierung geben und sie zu eigenen Versuchen anregen. Die Installationsanleitung und die Download- bzw. Bezugsquellenangaben sollen auch OS/2-Anfängern die Möglichkeit geben, mit Perl zu experimentieren und es vielleicht nutzbringend einzusetzen. Er ist für alle, die keine Lust haben, sich erst lange mit der Theorie vertraut zu machen, sondern gleich loslegen wollen.

Warum nun Perl unter OS/2?

Perl ist leichter zu erlernen als REXX (welches ja zum Lieferumfang von OS/2 gehört) oder C++ und es ist im Prinzip plattformunabhängig (Systemaufrufe sind natürlich immer plattformspezifisch). Mit Perl unter OS/2 entwickelte Programme können genau so unter Linux, Unix, Windows NT und DOS funktionieren. Man benötigt nur den entsprechenden Perl-Interpreter und die EMX-Runtime-Umgebung. Das alles ist frei im Internet verfügbar und kostenlos. Ich verwende EMX-Version 5 und Perl 5.004_55.

Perl eignet sich insbesondere für die Verarbeitung von Texten und ist somit auch ideal auf Web-Servern für CGI-Scripte einsetzbar, besonders wenn man bedenkt, dass man sich jederzeit für ein anderes Betriebssystem entscheiden kann, ohne die Funktionsfähigkeit des Web-Servers einzuschränken (das hängt natürlich doch etwas vom gewählten Betriebsystem ab, bei Linux z.B. gibt es keine Probleme).

Ein kleines Perl-Programm

Um zu zeigen, wie leicht es ist ein kleines Perl-Programm zu schreiben, hier ein erster Einstieg. Nie sollte man dabei vergessen ein solches Programm gut mit Kommentaren zu dokumentieren, da es sonst später sehr schwer möglich ist, das Programm zu verstehen.

Ein Perl-Programm kann mit einem einfachen Texteditor (z.B. dem OS/2-Systemeditor) geschrieben werden. Wichtig ist hierbei die 1. Zeile, welche mit einem Doppelkreuz # beginnt, die dem Perl-Interpreter sagt, dass es ich um ein Perl-Programm handelt und wo sich der Standard-Pfad für den Perl-Interpreter befindet. Sie lautet bei mir so:

#!/tools.os2/emx/bin/perl
Danach folgt der Programmtext, Kommentare werden mit # für jede Zeile eingeleitet.
Programmtext:
#!/tools.os2/emx/bin/perl
#Ein einfaches Beispiel
#zur Erläuterung des Arbeitens mit Perl
#1. die Zuweisungen der Variablen
#einfache Variable, beginnen immer mit $
#Zuweisung, die Variable $a soll den Wert 1 bekommen
$a = 1;
#fast jeder Perl-Befehl endet mit ;
#außer Kommentare und Schleifenbefehle
#Zuweisung, die Variable $b soll den Wert 3 bekommen
$b = 3;
#Nun die Ausgabe dieser Werte, eine Addition und die Ausgabe des Ergebnisses
print "Variable 1: $a\n"
print "Variable 2: $b\n"
$c = $a + $b;
print "Summe: $c\n"
# \n ist jeweils ein Zeilenwechsel
#Das war's.

Der Start des Programms erfolgt durch Aufruf des Perl-Interpreters und Übergabe des Namens der Programm-Datei.
Im OS/2-Fenster sieht das nun so aus:


Da man ohne ein funktionierendes Perl auf seinem Computer dieses Beispiel hier nicht ausprobieren kann, möchte ich jetzt die Bezugsquellen und die Installation vorstellen.

Die Beschaffung

Um Perl einzusetzen benötigt man die Software selbst (komplett etwa 7 MB ZIP-Dateien) und die EMX-Runtime-Library.

Diese sind unter

ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/emxrt.zip
ftp://ftp.leo.org/pub/comp/os/os2/leo/gnu/script/cpan/latest

oder

http://hobbes.nmsu.edu/pub/os2/dev/emx/v0.9d/emxrt.zip
http://hobbes.nmsu.edu/cgi-bin/h-browse?sh=1&dir=//pub/os2/dev/perl

zu finden.

Sollte Perl in einzelnen ZIP-Archiven vorliegen, benötigt man folgende:

perl_aou.zip
perl_blb.zip
perl_exc.zip
perl_inf.zip
perl_mam.zip
perl_man.zip
perl_mlb.zip
perl_pod.zip
perl_sh.zip
perl_ste.zip
perl_utl.zip
plinstl0.zip
plinstal.zip
plreadme.zip

Das Entpackprogramm für die ZIP-Archive findet man auch hier

ftp://ftp.leo.org/pub/comp/os/os2/leo/archiver/unzip532.exe

Das Programm wird in ein Verzeichnis kopiert und dann durch Aufrufen entpackt.

Die Installation

Nachdem man sich die Software beschafft hat, kann es losgehen. Wichtig ist noch, dass man nicht vergißt sich ein Entpackprogramm (unzip) zu beschaffen.

Zuerst muß die EMX-Runtime installiert werden. Alte EMX-Bibliotheken dürfen nicht vorhanden sein! Es kann durchaus vorkommen, dass andere Software bereits einige EMX-DLLs usw. installiert hat. Um diese zu lokalisieren, gibt man den Befehl

dir c:\emx*.* /s
in einem OS/2-Fenster ein und durchsucht evtl. noch weitere Laufwerke danach. Entscheidend sind folgende Dateien:

emx.dll
emxio.dll
emxlibc.dll
emxlibcm.dll
emxlibcs.dll
emxwrap.dll
emx.exe
emxbind.exe
emxfpemu
emxl.exe
emxload.exe
emxrev.cmd
emxstack.exe
emxupd.exe

Diese Dateien sollten sofern vorhanden umbenannt und später, wenn auch die alte Software mit dem neuen EMX läuft, entfernt werden. Als nächstes legt man das Verzeichnis für EMX fest, bei mir c:\Tools.os2\emx (Verzeichnis emx wird automatisch beim Entpacken angelegt). Danach wird die gepackte Datei, meist emxrt.zip o.ä., in dieses Verzeichnis (c:\Tools.os2) und das Entpackprogramm (unzip.exe, ich verwende UnZip 5.20 of 30 April 1996 für OS/2, aber es geht auch mit anderen, zur Not auch DOS-unzip) am besten unter c:\os2\apps kopiert. Jetzt EMX entpacken:

OS/2-Fenster aufrufen
cd c:\Tools.os2
unzip emxrt.zip

Erledigt!

Als letztes müssen in der CONFIG.SYS drei Zeilen ergänzt werden (besser vorher Sicherheitskopie anlegen - man weiß ja nie...):

LIBPATH= ... ;C:\TOOLS.OS2\EMX\DLL
SET BOOKSHELF= ... ;C:\TOOLS.OS2\EMX\PERLLIB\BOOK
SET PATH= ... ;C:\TOOLS.OS2\EMX\BIN

Danach ist ein OS/2 Neustart erforderlich. Die Funktion testet man durch Eingeben von

emxrev
im OS/2-Fenster. Sie sollten folgende Ausgabe für EMX 0.9d fix 4 bekommen:

EMX : revision = 61
EMXIO : revision = 60
EMXLIBC : revision = 63
EMXLIBCM : revision = 64
EMXLIBCS : revision = 64
EMXWRAP : revision = 60

Tauchen andere Werte auf, so geistert sicher noch irgendwo eine alte DLL rum, die noch entfernt werden muß. Die Perl-Installation ist mittels Installationsprogramm (plinstal.zip und plinstl0.zip) recht einfach. Diese beiden Dateien müssen in das Verzeichnis entpackt werden, in welchem sich auch die anderen Perl-ZIP-Dateien befinden. Am besten unter c:\temp\pinst. Wechseln Sie dazu in dieses Verzeichnis und geben folgendes ein:

unzip plinstal.zip
unzip plinstl0.zip
Siehe auch oben. Nun startet man mit
install

das Installationsprogramm und hat anschließend die Möglichkeit den Umfang der Installation zu bestimmen. Im Zweifelsfall installiert man alles. Wichtig ist das richtige Setzen der Installationsverzeichnisse.





Die unter PERLLIB liegenden Verzeichnisse werden einfach übernommen.

Die Struktur sieht nach der Installation bei mir wie folgt aus:

Fehlt das komplette Installationsprogramm, so muß man die Installation manuell vornehmen. Hilfe bietet hierbei die Datei README.os2 (plinstl0.zip und plreadme.zip entpacken).

Zusammengefaßt:

Wichtig! Verzeichnis c:\tools.os2\emx\perllib unbedingt vorher anlegen.
mkdir c:\tools.os2\emx\perllib

Wichtig! Verzeichnis c:\tools.os2\emx\book unbedingt vorher anlegen.

mkdir c:\tools.os2\emx\book

Aus diesen Befehlen kann man auch eine Datei erstellen, Name z.B. inst.cmd und mit dieser läuft dann alles automatisch ab. Als letztes muß noch die CONFIG.SYS angepaßt werden. Folgende SET-Befehle sind hinzuzufügen:

set PERL_BADLANG=0
set PERLLIB_PREFIX=C:\TOOLS.OS2\EMX\PERLLIB\LIB
set PERL_SH_DIR=C:\TOOLS.OS2\EMX\BIN
set MANPATH=C:\TOOLS.OS2\EMX\PERLLIB\MAN
set PERL_BADLANG=0
set PERLLIB_PREFIX=f:/perllib/lib;C:/Tools.OS2/emx/PERLLIB/lib
set PERL_SH_DIR=C:\Tools.OS2\emx\BIN
Der Pfad-Eintrag f:/perllib/lib muß aus Kompatibilitätsgründen vorhanden sein, er existiert nicht wirklich. Starten Sie das System neu. Nun sollte Perl laufen. Test mit
perl -v
und
testperl
Das Testprogramm muß ohne Fehlermeldungen durchlaufen. Folgendes wird angezeigt, wenn alles OK ist:
[C:\]testperl
Status für ECHO ist OFF.
Testing perl... Getting version...
Status für ECHO ist OFF.
This is perl, version 5.004_55 built for os2
Copyright 1987-1997, Larry Wall
OS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel
Version 5 port Copyright (c) 1994-1997, Andreas Kaiser, Ilya Zakharevich
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5.0 source kit.
====================================
We checked that Perl can be loaded. Apparently, your PATH and LIBPATH
are set to reasonable values. From now on the tests are coded in Perl.
Press <ENTER>:
====================================
The next step is to check that you installed shell in a location perl can
find, so that you can start external programs.
I could find your shell, its version is '@(#)PD KSH v5.2.7 96/06/04'
Press <ENTER>:
====================================
Ouph, the most frequent problem is behind... Now testing Perl library search.
Found Perl library. Fine...
Press <ENTER>:
====================================
The following entries in 'C:/Tools.OS2/emx/PERLLIB/lib/os2/5.00455/Config.pm'
contain path settings which look suspicious:
archlibexp => 'C:/Tools.OS2/emx/PERLLIB/LIB/os2/5.00455'
installarchlib => 'C:/Tools.OS2/emx/PERLLIB/LIB/os2/5.00455'
installprivlib => 'C:/Tools.OS2/emx/PERLLIB/LIB'
installprivlib => 'C:/Tools.OS2/emx/PERLLIB/LIB'
libpth => 'f:/emx.add/lib f:/emx/lib D:/DEVTOOLS/OPENGL/LIB f:/emx/lib/mt'
privlibexp => 'C:/Tools.OS2/emx/PERLLIB/LIB'
archlib => 'C:/Tools.OS2/emx/PERLLIB/LIB/os2/5.00455'
bin => 'C:/Tools.OS2/emx/BIN'
binexp => 'C:/Tools.OS2/emx/BIN'
full_sed => 'F:/EMX.ADD/BIN/sed'
installbin => 'C:/Tools.OS2/emx/BIN'
installman1dir => 'C:/Tools.OS2/emx/PERLLIB/MAN/man1'
installman3dir => 'C:/Tools.OS2/emx/PERLLIB/MAN/man3'
installscript => 'C:/Tools.OS2/emx/BIN'
installsitearch => 'C:/Tools.OS2/emx/PERLLIB/LIB/SITE_PERL/os2'
installsitelib => 'C:/Tools.OS2/emx/PERLLIB/LIB/SITE_PERL'
libc => 'f:/emx/lib/mt/c_import.lib'
make => 'F:/EMX.ADD/BIN/make'
man1dir => 'C:/Tools.OS2/emx/PERLLIB/MAN/man1'
man1direxp => 'C:/Tools.OS2/emx/PERLLIB/MAN/man1'
man3dir => 'C:/Tools.OS2/emx/PERLLIB/MAN/man3'
man3direxp => 'C:/Tools.OS2/emx/PERLLIB/MAN/man3'
perlpath => 'C:/Tools.OS2/emx/BIN/perl'
privlib => 'C:/Tools.OS2/emx/PERLLIB/LIB'
rsx => 'f:/zax/bin//rsx.exe'
scriptdir => 'C:/Tools.OS2/emx/BIN'
scriptdirexp => 'C:/Tools.OS2/emx/BIN'
sitearch => 'C:/Tools.OS2/emx/PERLLIB/LIB/SITE_PERL/os2'
sitearchexp => 'C:/Tools.OS2/emx/PERLLIB/LIB/SITE_PERL/os2'
sitelib => 'C:/Tools.OS2/emx/PERLLIB/LIB/SITE_PERL'
sitelibexp => 'C:/Tools.OS2/emx/PERLLIB/LIB/SITE_PERL'
strings => 'f:/emx/include/string.h'
sysman => 'F:/MAN/man1'
timeincl => 'f:/emx/include/sys/time.h '
usrinc => 'f:/emx/include'
Press <ENTER>:
====================================
You DID NOT edit 'C:/Tools.OS2/emx/PERLLIB/lib/site_perl/os2/Net/Config.pm',
You may have a lot of problems with networking... Please edit this file.
Tests finished. Press <ENTER>:
[C:\]

Programmierung mit Perl

Mit einem Texteditor (z.B. dem OS/2-Systemeditor) wird nun der Programmtext geschrieben. Der Dateiname ist frei wählbar, sinnvoll ist aber als Endung .pl. Die Erläuterungen zu der Programmen stehen als Kommentar im Programmtext.

Programmteil 1

Dies ist der erste Bestandteil jedes der vorgestellten 6 Beispielprogramme und enthält die Variablenzuweisungen.

#!/tools.os2/emx/bin/perl
#Ein einfaches Beispiel
#zur Erläuterung des Arbeitens mit Perl
#1. die Zuweisungen der Variablen
#einfache Variable, beginnen immer mit $
#Zuweisung, die Variable $a soll den Wert 1 bekommen
$a=1;
#fast jeder Perl-Befehl endet mit ;
#außer Kommentare und Schleifenbefehle
#Zuweisung, die Variable $b soll den Wert 3 bekommen
$b=3;
#Strings (Text) werden in " " oder ' ' eingeschlossen
$c="Meier"
$d='der "Alte" ';
$A="Groß"
$B="und Klein"
$C="macht schon einen"
$D="Unterschied!"

Programmteil 2

Dieser beinhaltet Beispiele der Ausgabe der Daten. Jedes Beispiel sollte einzeln ausprobiert werden, das Programm ist jedoch auch als ganzes Funktionsfähig (nicht vergessen: Programmteil 1 gehört ein Mal zum Programm).

#2. die Ausgabe der Werte
#nun zur Tat - die Ausgabe der Werte, die den Variablen zugewiesen wurden
#Der Druckbefehl (Ausgabe auf dem Bildschirm) ist einfach
#\n erzeugt einen Zeilenwechsel, funktioniert aber nur in " " eingeschlossen,
nicht in ' '
print "\n---------------------------------------------------\n"
print "Beispiel 1\n"
print $a;
print $b;
print $c;
print $d;

Gestartet wird das Programm durch Eingabe von

perl prog1.pl
im OS/2-Fenster.

#auch als ein Befehl
#aber unbedingt mit dem Verkettungszeichen . (aneinanderhängen)
#ohne geht's nicht!
print "\n---------------------------------------------------\n"
print "Beispiel 2\n"
print $a.$b.$c.$d;
#oder aber in " " oder ' ' dann geht es ohne Verkettungszeichen
#und man kann nun auch Leerzeichen einsetzen
print "\n---------------------------------------------------\n"
print "Beispiel 3\n"
print "$a $b $c $d"
#mit Zeilenumbruch (\n) ist's sicher besser
print "\n---------------------------------------------------\n"
print "Beispiel 4\n"
print "$a\n$b\n$c $d\n"
print "$A $B $C $D\n"
print "$a\n$b"
#print kann auch rechnen
print "\n---------------------------------------------------\n"
print "Beispiel 5\n"
print $a+$b;
#Perl sucht sich selbst heraus ob eine Variable Text oder Wert ist
print "\n---------------------------------------------------\n"
print "Beispiel 6\n"
print "$b\n"
#$b um 10 erhöhen
$b=$b+10;
print "$b\n"
#an die Zahl wird ein Text angehängt, damit ist $b ein String (Zeichenkette)
$b=$b."ist nun keine Zahl mehr"
print "$b\n"
#aber wenn ich wieder 10 addiere wirft Perl den Textteil weg
$b=$b+10;
print "$b\n"

Viel Spass beim Probieren!

Quellenverzeichnis:

EMX Runtime 0.9d fix 4 (LEO) - ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/emxrt.zip
Perl Distribution (LEO) ftp://ftp.leo.org/pub/comp/os/os2/leo/gnu/script/cpan/latest
EMX Runtime 0.9d fix 4 (Hobbes) http://hobbes.nmsu.edu/pub/os2/dev/emx/v0.9d/emxrt.zip
Perl Distribution (Hobbes) http://hobbes.nmsu.edu/cgi-bin/h-browse?sh=1&dir=//pub/os2/dev/perl


[Artikelverzeichnis]
editor@os2voice.org
[Vorherige Seite] [Inhaltsverzeichnis] [Nächste Seite]
VOICE Homepage: http://de.os2voice.org