Perl |
Perl ist eine Interpretersprache, die umfangreiche Möglichkeiten im Umgang mit Texten und Mustern liefert und dabei dennoch tiefe Zugriffe auf das System ermöglicht. Da der Syntax stark an C und an Tools angelehnt ist, mit denen man sonst die entsprechenden Aufgaben löst, ist die Einarbeitung nicht sehr aufwendig. Kein Wunder, dass sich diese Sprache wie im Flug verbreitet.
$name = "hugo"; $wert = 15; print $name; |
$fullname = $firstname . " " . $lastname; |
Für den Vergleich zweier Strings gibt es die Operatoren:
| eq | Sind Strings gleich? |
| ne | Sind Strings ungleich? |
| lt | Ist erster String kleiner? |
| le | Ist erster String kleiner oder gleich? |
| gt | Ist erster String größer? |
| ge | Ist erster String größer oder gleich? |
| cmp | Wie strcmp in C: liefer -1 bei kleiner, 0 bei gleich und 1 bei größer |
Mit einem x kann man einen String vervielfältigen. print "-" x 40; erzeugt eine Reihe von 40 Minuszeichen.
Innerhalb eines Strings können mit dem Backslash eingeleitet Sonderzeichen oder Umwandlungen betrieben werden. Dabei bedeuten:
| \n | Line Feed |
| \t | Tabzeichen |
| \$ | Dollarzeichen |
| \\ | Backslash-Zeichen |
| \l | nächstes Zeichen in Kleinbuchstaben wandeln |
| \L .. \E | Zeichen zwischen \L und \E in Kleinbuchstaben wandeln |
| \u | nächstes Zeichen in Großbuchstaben wandeln |
| \U .. \E | Zeichen zwischen \U und \E in Großbuchstaben wandeln |
@werte = ( 2,4,6); print @werte[1]; $wert = @werte[0]; |
Eine wichtige Funktion ist split. Mit ihr kann ein String in ein Array an der Stelle aufgebrochen werden, wo ein besonderes Zeichen erscheint.
@wort = split(' ', $satz);
|
@wort[0] hat dann das erste Wort von $satz, @wort[1] das zweite und so weiter.
In Perl können mehrere Skalare gleichzeitig aus einem Array entnommen werden. Beispiel:
while (@array) {
($a, $b, @neu) = @array;
print $a." ".$b."\n";
@array = @neu;
}
|
Die erste Anweisung im while-Block nimmt das erste Element des Arrays in den Skalar $a, das zweite in den Skalar $b und füllt den Rest in das Array @neu. Die Schleife zeigt insgesamt den Inhalt des Arrays pärchenweise.
Das vordefinierte Array @ARGV enthält die Parameter, die beim Aufruf übergeben wurden. Im Gegensatz zu C ist @ARGV[0] nicht der Name des eigenen Programmes (den findet man in $0), sondern der erste Parameter.
if (expression) block [ elsif block ] [ else block ] while (expression) block do block while (expression) |
Ein Block besteht wie in C aus Anweisungen in geschweiften Klammern.
Die for-Anweisung ist eher an die UNIX-Skripten angelehnt.
for $i (@array) {
print $i."\n";
}
|
Hier nimmt der Skalar $i nacheinander die Werte des Arrays @array an. In jedem Durchlauf wird also ein Element von @array angezeigt.
%kuerzel = ('sl', 'Schleswig', 'fl','Flensburg','hh','Hamburg');
$kuerzel{'hg'} = 'Bad Homburg';
foreach $key(sort keys(%kuerzel)) {
print "Key = $key, Value = $kuerzel{$key}\n";
}
|
Man beachte die Verwendung des $, sobald kuerzel über den Schlüssel referenziert wird. Durch sort wird die Reihenfolge der Schlüssel sortiert ausgegeben.
if ( $a =~ /menu/i ) { print "ja"; }
$b =~ s/alt/neu/gi;
|
In der ersten Zeile wird abgefragt, ob der String "menu" in der Variablen $a enthalten ist. Wenn ja, wird der Anweisungsblock ausgeführt. In der zweiten Zeile werden in der Variablen $b alle vorkommenden Strings "alt" durch den String "neu" ersetzt. Dabei deutet das i hinter dem letzten Schrägstrich an, dass Gross- und Kleinschreibung ignoriert werden soll. Das g bedeutet, dass nicht nur das erste Auftreten, sondern global alle Vorkommnisse ersetzt werden sollen.
sub linie {
print '-' x @_[0];
}
linie(5);
|
open(HANDLE, $filename) || die "Datei nicht zugreifbar"; print HANDLE $value; $value = <HANDLE> close HANDLE; |
Hinter dem Oder (||) bei der Eröffnung steht die Anweisung, die ausgeführt wird, wenn das Öffnen nicht funktioniert. Wird dem print das Handle nachgestellt, schreibt der Befehl in die Datei. Das Lesen aus der Datei erreicht man durch Zuweisung. Dazu wird das HANDLE in spitze Klammern gestellt.
Wie bei UNIX-Skripten können Dateien auf Existenz und andere Eigenschaften geprüft werden. Beispiel:
if ( -f 'huhu' ) {
unlink 'huhu';
}
|
Hier wird huhu nur gelöscht, wenn es auch als Datei existiert. Die wichtigsten unären Operatoren sind:
| -r -w -x | vom effektiven UID/GID les-, schreib bzw. ausführbar |
| -R -W -X | vom realen UID/GID les-, schreib bzw. ausführbar |
| -f | existiert als Datei |
| -d | existiert als Verzeichnis |
| -l | existiert als symbolischer Link |
Die Standardaufrufe zum Bearbeiten von Dateien ähneln denen in C. Beispielsweise:
| unlink $filename | Löschen einer Datei |
| rename $filename,$neuname | Ändern des Namens einer Datei |
| mkdir $filename | Erzeugen eines Verzeichnisses |
| rmdir $filename | Löschen eines Verzeichnisses |
| Homepage | (C) Copyright 2000 Arnold Willemer |