Perl ist für viele Plattformen erhältlich und mit erscheinen der Version 5.6 wurde die Anzahl der unterstützen Plattformen nochmal erhöht. Die grundlegende Funktionalität steht so für viele Plattformen bereit. Da die unterstützten Betriebssysteme ihre Eigenheiten haben, sollte man die Skripte möglichst gut darauf vorbereiten, wenn man vollständig portabel programmieren will oder muß.
Bei den Dateipfaden fangen die Inkompatibilitäten an, Windows benutzt den Backslash, Unix und Linux den Slash und Mac OS den Doppelpunkt, um die Verzeichnisse zu trennen. Verwendet man in einem Skript Pfadnamen, so empfehle ich diese in Variablen abzulegen, die gleich am Skriptanfang stehen. So sieht man auf den ersten Blick was auf einem anderen Betriebssystem angepasst werden muß. Für die Dateinamen gilt, das man nur die Zeichen benutzen sollte, die auf allen Systemen zur Verfügung stehen. Das wären die Kleinbuchstaben (keine Umlaute oder ß), die Zahlen, der Underscore und der Punkt um eine evtl. Extension abzutrennen. Großbuchstaben sollte man nicht benutzen bzw. nur dann, wenn keine gleichen Dateinamen der Art "TEST" und "test" auftreten. Manche Betriebsysteme könnten diese Dateien als gleich bzw. ungleich betrachten, was dazu führt das das Skript fehlerhaft arbeitet.
Will man zur Laufzeit Pfade zusammenbasteln hat man auch das Problem nicht zu wissen, welchen Verzeichnistrenner das vorhandene OS benutzt. Das Perl Modul CGI.pm macht uns vor, wie man den Verzeichnistrenner zur Laufzeit ermitteln kann:
# Dieser Code stammt aus CGI.pm
unless ($OS) {
unless ($OS = $^O) {
require Config;
$OS = $Config::Config{'osname'};
}
}
if ($OS=~/Win/i) {
$dir_separator = '\\';
} elsif ($OS=~/vms/i) {
$dir_separator = '/';
} elsif ($OS=~/bsdos/i) {
$dir_separator = '/';
} elsif ($OS=~/dos/i) {
$dir_separator = '\\';
} elsif ($OS=~/^MacOS$/i) {
$dir_separator = ':';
} elsif ($OS=~/os2/i) {
$dir_separator = '\\';
} else {
$dir_separator = '/';
}
Zur Erklärung dieses Codes möchte ich an dieser Stelle nichts weiter sagen, nur das am Ende des Codestücks in $dir_seperator der Verzeichnistrenner steht. Man kann dann z.B. mit "$datei=$basispfad+$dir_seperator+$dateiname" den kompletten Pfad- und Dateinamen zusammensetzen.
Das Filelocking wird erst später in diesem Tutorial behandelt, es sei aber vorab erwähnt, das Filelocking nicht von allen Perlversionen untersützt wird. Benutzt man den Befehl unter dem Win 9x Port von Perl, so erhält man eine Fehlermeldung. Windows NT ist davon nicht betroffen, genausowenig die Linuxversion. Aus diesem Grund empfiehlt es sich in Skripten die Filelocking benutze am Anfang einen Skalar einzuführen, mit dem man das Filelocking ausschalten kann, denn die Fehlermeldung erscheint nur beim Aufruf, nicht beim compilieren des Skripts. Hier sei dann auch noch die Warnung ausgesprochen das Skripte ohne Filelocking Fehlverhalten erzeugen können.