IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Perl - Perl



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. Der Syntax ist stark an C und an die bekannten UNIX-Tools angelehnt.


Autor: Arnold Willerner (willemer)
Datum: 23-01-2002, 19:36:46
Referenzen: http://www.willemer.de/informatik/index.htm
Schwierigkeit: Profis
Ansichten: 4259x
Rating: Bisher keine Bewertung.

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



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. Der Syntax ist stark an C und an die bekannten UNIX-Tools angelehnt.

Skalare

Skalare nennt Perl die einfachen Variablen, die sowohl numerische als auch Strings aufnehmen können. Diese Variablen werden durch ein $ eingeleitet.


$name = "hugo";
$wert = 15;
print $name;

Numerische und boolesche Operationen auf Skalare

Die mathematischen und auch die booleschen Operatoren von C sind auch unter Perl verwendbar.

Stringfunktionen

Durch einen Punkt werden zwei Strings aneinandergehängt.

$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

Arrays

Arrays werden mit einem @-Zeichen eingeleitet. Die Referenz auf ein Element geschieht wie in vielen Sprachen mit den rechteckigen Klammern. Die Indizes beginnen wie in C immer bei 0. Die Zuweisung kann durch Aneinanderreihung in Klammern erfolgen. Beispiel:


@werte = ( 2,4,6);
print @werte[1];
$wert = @werte[0];

Eine nützliche Funktion ist split. Mit ihr kann ein String in ein Array an der Stelle aufgebrochen werden, wo ein besonderes Zeichen erscheint. Diese Funktion erleichtert die Analyse von CGI-Übergabedaten sehr.

@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.

Die Zeichenkombination $# ermittelt den höchsten Index eines Arrays und damit seine Dimension. Ein leeres Array liefert -1.

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.

Hash

Dieser Variablentyp ist eine Art paarweises Array, wobei das jeweils vordere Element als Zugriffsschlüssel auf das hintere wirkt. Beispiel:


%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.

Ablaufsteuerung


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.

Aufrufparameter

Wie bei Shellskripts findet sich die Aufrufumgebung in vordefinierten Variablen. Allerdings unterscheidet Perl zwischen dem Namen des Skripts und seinen Parametern. Der Name des Skripts befindet sich in $0. Allerdings sind die Aufrufparameter nicht in $1 und folgende abgelegt, sondern finden sich im vordefinierten Array @ARGV. Der erste Parameter befindet sich in @ARGV[0]! Das folgende Beispiel zeigt die Aufrufumgebung des Skriptes an:


#!/usr/bin/perl
print "skript name: ", $0, "\n";
print "Parameterzahl: ", $#ARGV, "\n";
print "Parameterliste: \n";
for ($i=0; $i<=$#ARGV; $i++)
{
   print "$i.: ", @ARGV[$i], "\n";
}

Die Kombination $# liefert den höchsten Index des Arrays. Ist das Array leer, ist dieser Wert -1. Bei einem Parameter ist $#ARGV gleich 0! Aus diesem Grund läuft $i in der Schleife auch bis <= $#ARGV. Für den C-Programmierer etwas gewöhnungsbedürftig ist, dass $i auch innerhalb des Strings ausgewertet wird. Ein Beispiel für den Aufruf des Skripts:


bash$ argv.pl  sonstwas  und dann noch dies
skript name: ./argv.pl
Parameterzahl: 4
Parameterliste: 
0.: sonstwas
1.: und
2.: dann
3.: noch
4.: dies
bash$ argv.pl
skript name: ./argv.pl
Parameterzahl: -1
Parameterliste: 
bash$ 

Suchen und Ersetzen

Das Suchen und Ersetzen erinnert im Syntax an sed bzw. vi.


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.

Funktionen

Eine Funktion wird mit dem Schlüsselwort sub definiert. Parameterübergaben erfolgen über das Array @_. Es können lokale Variablen mit Hilfe der Schlüsselworte local oder my definiert werden. my definiert die Lokalität wie in C, bei local können aufgerufene Funktionen auf die Variablen der aufrufenden Funktion zugreifen.


sub linie {
  print '-' x @_[0];
}
linie(5);

Dateien

Um auf eine Datei zuzugreifen, muss sie zunächst eröffnet werden. Dabei erhält man ein Dateihandle, das für den weiteren Zugriff auf die Datei benötigt wird.


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

Andere Systemaufrufe

Auch hier finden sich viele Ähnlichkeiten zu C. Selbst Aufrufe wie fork und kill sind möglich. Da auch die Netzwerkfunktionen wie accept oder connect verfügbar sind, ist es auch möglich Netzwerkserver zu programmieren.

Quellen

http://www.perl.com
Kamran Husain: Perl. in Red Hat Linux Unleashed, Chapter 29, pp. 497-522. Sams Publishing, 1996.


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06246
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1154
Comments: 0