Benutzer-Werkzeuge

Webseiten-Werkzeuge


perl

Informationen

  • perldoc.perl.org
  • man perl und man-pages der Begfehle
  • perldoc -f Funktionsname → Beschreibung zu einer Funktion

Pragmas

Pragma Beschreibung
use strictWarnung bei Nutzung von „unsauberen“ Programmierkonstrukten
use warningsWarnung bei Programmierkonstrukten die durch Perl verschieden interpretiert werden können

Konstrukte

Bedingungen (werden bei den meisten Konstrukten eingesetzt) können Vergleiche sein (größer, kleiner, gleich usw.), können aber auch beliebige andere Operationen sein (Zuweisungen, Rechenoperationen usw.).
Wichtig ist nur, dass es eine Operation ist und diese erfolgreich/richtig/wahr (true) oder falsch/fehlgeschlagen/unwahr (false) sein kann.
Es muss dabei kein true oder false zurückgegeben werden - es wird der Ausgang der Operation ausgewertet (der dann true oder false ist).

if-else

  • Verzweigung - wenn dann, sonst
  • Trifft ein Bedingung zu werden die nachfolgenden Bedingungen nicht mehr auf zutreffen geprüft und die darin befindlichen Code-Blöcke entsprechend auch nicht ausgeführt
if (//Bedingung1//)
{
         //Code1//;
}
elseif (//Bedinung2//)
{
       //Code2//;
}
else
{
      //Code3//;
}
  • Bedingung: Eine Bedingung wann der Code-Block ausgeführt werden soll (wenn Bedingung true ergibt - Ausdruck zutreffen ist)
  • Code: Auszuführender Code


  • elseif- bzw. else-Anweisungen sind optional
  • els-Anweisung wird durchlaufen, wenn die initiale if-Bedingung nicht zutrifft (nicht wahr ergibt)
    • elseif wird nur durchlaufen wenn die if-Bedingung nicht true ergeben hat und die Bedingung der elseif-Anweisung wahr ist → Um Bedingung erweiterte else-Anweisung

Schleifen

  • For-Schleife, For-each-Schleife, While-Schleife, do-while-Schleife, do-until-Schleife



  • last → Operator zum Abbrechen der Ausführung einer Schleife
    • Der aktuelle Durchlauf ist dann der letzte (deswegen last)m

For-Schleife

  • Zählerschleife
  • Initalisiert eine Variable mit einem Wert und definiert in welchen Schritten diese inkrementiert (erhöht) oder dekrementiert (heruntergezählt) wird bei jedem Durchlauf der Schleife
  • Wird durchlaufen bis die definierte Bedingung zutrifft

Syntax:

for (Initalisierung Zähler;Abbruchbedingung;Inkrementier-/Dekrementier-Anweisung)
{
Anweisung;
}

  • Initalisierung Zähler: Definition der Zählervariable und Wertzuweisung
  • Abbruchbedingung: Logischer Ausdruck bei dessen eintreten die Ausführung abgebrochen wird
  • Inkremetier-/Dekrementier-Anweisung: Mathematischer Ausdruck der die Zählvervariable inkrementiert oder dekrementiert (z.B. i++ oder i=+3)



Beispiel:

for (my $i=0;$i<10;$i+=3)
{
    print $i;
}



Achtung: Wird das Pragma „strict“ verwendet muss für die Zählervariable der Gültigkeitsbereich angegeben werden → es muss also vor der Zählverariable my stehen → Beispiel: for (my i=0;$i<10;$i++)

While-Schleife

  • Wird ausgeführt solange die Bedingung true ergibt (also wahr/gegeben ist)
  • Als wahr wird alles betrachtet was ungleich 0 ist
    • das lässt Operationen wie while (<HANDLER>) zu, bei denen die Schleife solange durchlaufen wird, solange in der Variable etwas steht (bzw. der Handler etwas liefert)



Syntax:

while ( $a < 10 )
{
     Anweisungen;
}

For-each-Schleife

  • Durchläuft die Schleife für jedes Element eines Arrays oder Hashmap

Syntax:

foreach //Index// (//Array//)
{
      Code;
}

Index: Variable in der der aktuelle Index (sowohl bei Arrays → numerisch, als auch bei Hashmaps → String)
Array: Name des Arrays


Alternativ kann der Index auch weggelassen werden:

foreach (//Array//)
{
    Code;
}

Funktionen

  • Werden per sub Funktionsname definiert
  • Aufruf erfolgt per &Funktionsname
    • An sich ist & nicht notwendig wenn die Angabe per Funktionsname() erfolgt
    • allerdings scheint das nicht in allen SItuationen zu funktionieren
  • Definition erfolgt meist am Ende des Programms (im Gegensatz zu den meisten Programmiersprachen)

Syntax:

//rueckgabevariable//=&//Funktionsname// (//Paramter1//, //Parameter2//);

sub //Funktionsname//
{
        Code;
        (//Rückgabewert//);
}
  • Funktionsname: Bezeichner der Funtkion
  • Paramaterx: Optional Parameter die der Funktion übergeben werden sollen
    • auf die Parameter kann innerhalb der Funktion über das Array _ zugegriffen werden - sprich über @_ für alle Parameter oder $_[Index]
  • Rückgabewert: Optional - Wert den die Funktion zurückgeben soll → dieser muss in () eingeschlossen sein oder es wird der letzte berechnete Wert verwendet.
  • rueckgabevariable: Optional - Variable die den Rückgabewert der Funktion aufnimmt



Beispiel:

rueggabewert=&Ausgabe ("Hallo","Doro");

sub Ausgabe
{
    print "Als Einzel-Parameter: $_[0] $_[1]";
    print "Alle Parameter mit einmal: $@";
    (0);
}

Auf übergebene Variablen kann nicht wie bei anderen Programmiersprachen durch zuvor als Übergabevariablen übergebene Bezeichner zugegriffen werden, sondern nur über das Array _ (@_).
Auf einzelne übergebene Variablen über $_[Index].

Achtung: @_ bzw. $_[Index] sind Pointer/Referenzen auf die Variablen die übergeben werden. Wird der Wert von $_[Index] geändert, ändert sich der Wert der übergebenen Variable auch.

Regular Expressions/Reguläre Ausdrücke

  • Strings ändern
  • auf Strings matchen/vergleichen
  • Zuweisungs- und Vergleichsoperator (ähnlich == ): =~
    • liefert bei Ersetzungen den manipulierten String



Syntax: Variable=~Regulärer Ausdruck;

  • Variable: Variable die zu durchsuchenden/zu manipulierenden String enthält
  • Regulärer Ausdruck: Der reguläre Ausdruck für den Vergleich/die Manipulation
    • Suchen nach einem Teilstring /Suchstring/ → der String kann dabei reguläre Ausdrücke enthalten
    • Ersetzen eines Teilstring s/Suchstring/Austauschstring/ → sowohl Suchstring, als auch Austauschstring können dabei reguläre Ausdrücke enthalten

Beispiel:
$Line=~s/ä/ae/g;
$Line=~/ae/;

Erstes Beispiel: Suche alle (Option g am Ende) ä's im String der Variable $Line und ersetze sie durch ae.
Zweites Beispiel: Suche „ae“ im String in $Line → wenn vorhanden wird true zurückgegeben, wenn nicht false.

Operatoren:

Typ Operator Beschreibung
Suchen=~/Suchstring/Überprüft ober der angegebene String in der links von =~ angegebenen Variable enthalten ist

Syntax: Variable=~/Suchstring/
Ersetzen=~s/Suchstring/Ersatzstring/OptionenErsetzt den Suchstring durch den Ersatzstring in der Variable links von =~ (der zu modifizierende String wird von dort ausgelesen und auch dort wieder hineingeschrieben).

Syntax: Variable=~s/Suchstring/Ersatzstring/Optionen

Optionen:
i → Ignore Case - Ignoriere Groß- und Kleinschreibung
-g → Global - Suche und Ersetze alle Vorkommen; Normalerweise wird nur das Erste erscheinen gesucht und ersetzt

Hinweis: Es wird ohne Option „g“ nur das erste Aufreten des Suchstrings gefunden und ersetzt



Zeichenklassen:

Pattern Erklärung
.Ein beliebiges Zeichen
[Zeichenauswahl]Ein Zeichen aus den vorgegebenen


Beispiel: Tes[atl]

Beispiel ergibt Tesa oder Test oder Testl

Die Auswahl gilt nur für das Zeichen an der entsprechenden Position (es sei denn es folgen Pattern die den Gültigkeitsbereich erweitern).
[Zeichenvon-Zeichenbis]Zeichenklase - Bereich von Zeichen

\ Beispiel: Bl[a-e]

Beispiel matcht Bla, Blb, Blc, Bld, Ble.

Die Auswahl gilt nur für das Zeichen an der entsprechenden Position (es sei denn es folgen Pattern die den Gültigkeitsbereich erweitern).
\dDezimalzahl
\DKeine Ziffer (irgend ein anderes Zeichen)
\wWort? - Ein Buschstabe, Zahl oder _
\WKein Buschtstabe, Zahl oder _ - sondern ein anderes Zeichen
\sSpace? - Leerzeichen oder Newline (Zeilenumbruch)
\SKein Space? - kein Leerzeichen oder Newline (Zeilenumbruch)


Achtung: Pearl unterscheidet normalerweise zwischen Groß- und Kleinschreibung bei Pattern. Das bedeutet [abc] wird nicht auf ABC matchen.

Multiplikatoren beziehen sich immer auf das vorherghende Zeichen/Pattern und definieren wie oft er vorkommen kann bzw. muss. Multiplikatoren:

Multiplikator Bedeutung
?Einmal oder keinmal

Das vorangegangene Pattern bzw. Zeichen kann einmal oder keinmal auftreten.

Beispiel: Hall?o → matcht auf Hallo oder Halo (das zweite l kann einmal oder gar nicht vorhanden sein)
*Keinmal oder beliebig oft

Das vorangegangene Pattern oder Zeichen kann kein mal oder beliebig oft auftreten (hintereinander weg).

Beispiel: Hallo* → matcht auf Hallo, Hall, Hallooo
+Einmal oder beliebig oft

Das vorangegangene Pattern bzw. Zeichen kann einmal oder beliebig oft auftreten.

Beispiel: Hal+o → Halo, Hallo, Halllo → das l einmal oder beliebig oft
{x}Genaue Anzahl mal.
x ist eine Ziffer die definiert wie oft das voran gegangene auftreten muss und zwar exakt so oft.

Beispiel: Hal{2}o → matcht Hallo → das l muss genau 2 mal hintereinander auftreten
{x,y}Mindestens x mal und maximal y mal auftreten.
Das vorangegangene Pattern bzw. Buchstabe muss mindestens x mal (erster Wert in Klammern) und darf maximal y mal (zweiter Buchstabe) auftreten.

Basis-Schlüsselwörter

Schlüsselwort Beschreibung
printGibt einen Text aus
scalarSagt dem Compiler, dass ein Scalare verlangt wird.

Syntax: @Bezeichner1=scalar Bezeichner2

Sinvoll wenn der Compiler das selbst nicht erkennen kann, zum Beispiel bei Zuweisungen zwischen Hash-Maps, Arrays oder Ausgaben.

Operatoren

Operator Beschreibung
-BuchstabeDateien auf Eigenschaften prüfen

Funktioniert wie das Test-Kommando der Bash.

Buchstabe Bedeutung
-eExistiert die Datei oder das Verzeichnis
-rDatei oder Verzeichnis ist lesbar?
-wDatei oder Verzeichnis ist Schreibbar
-xDatei oder Verzeichnis ist Ausführbar/es kann in das Verzeichnis gewechselt werden
-fIst eine normale Datei
-dIst ein Verzeichnis
-TDie Datei enthält Textdatei
-BDie Datei ist eine Binärdatei
=~Vergleichs- und Zuweisungsoperator bei der Benutzung von Vergleichen oder Ersetzungen

Eine if-Operation auf eine Vergleichs- oder Ersetzungsanweisung gibt true oder false zurück (wenn der Such-/Ersetzungsstring vorhanden war).
Bei Ersetzungsanweisungen bewirkt es gleichzeitig eine Zuweisung an die vor dem Operator =~ angegebene Variable

Variablen

  • Nicht definierte Variablen haben den Wert „“ (wenn als String abgefragt) oder 0 (wenn als Integer geprüft)
  • Variablen müssen vor der Nutzung deklariert werden wenn das Pragma strict benutzt wird
    • ansonsten erst wenn sie genutzt werden



Deklaration: Geltungsbereich Typ Bezeichner = Wert;

Geltungsbereiche

Typen

Typ Wertebereich Deklarationszeichen Beschreibung
SkalarAlles$Undefinierter Standardtyp

Kann Zahlen, Referenzen (Pointer), Objekte, Zeichenketten beinhalten.


Zeichenketten:

  • Zeichenketten werden wie auf der Bash gehandhabt → in „ → Interpolation; in ' keine Interpolation

  • my $name=„Text $uebergabe“ → Text mit Interpolation (Steuerzeichen und Variablen werden ausgewertet und ersetzt durch den Inhalt) → Im Beispiel wäre Inhalt der Variabe dann „Text Inhalt der Variable $uebergabe“
  • my $name='Text $uebergabe' → Text ohne Interpolation (Steuerzeichen werden nicht interpretiert, der Inhalt von Variablen nicht eingefügt → Steuerzeichen und Variablen werden in die Zielvariable geschrieben wie sie dastehen) → Im Beispiel wäre der Inhalt der Variablen „Text $uebergabe“
ArrayAlles durcheinander@Array (Liste) aus Scalaren


Zuweisung: @Name=(Wert1, Wert2, Wert3)

Alles: @Name \\In dem Fall wird das Array als Array angesprochen und nicht ein einzelnes Element

Einzelnes Element: $Name[Index]
Zugriff erfolgt auf eine Skalare (gekennzeichnet durch $) und welche genau wird durch den Index definiert.

Anzahl Elemente: $Name=@Name \\Array wird als Array angesprochen, Zielvaraiable ist aber ein Skalar. Der Compiler weiß dann das die Anzahl der Elemente verlangt wird (da ja nich das gesamte Array in dem Skalar gespeichert werden kann und kein Einzelement verlangt wurde)

Anzahl Elemente: $Name=scalar @Name \\Mit scalar wird dem Compiler explizit mitgeteilt, dass ein Skalar erwartet wird (hilfreich wenn man die Anzahl in einem anderen Array speichern will oder sie ausgeben will).
HashBeliebig%Ähnlich Array, benutzt aber Keys (Schlüsselwörter) als Index, statt Nummern.
Hashes sind nach keiner Reihenfolge gespeichert (wichtig beim Ausgeben, sie müssen also noch sortiert werden).


Zuweisung: %Bezeichner=(KeyValue, Key2Value2);

* Bezeichner: Name der Variable
* Key: Schlüssel (Index) dem der Wert zugewiesen wird
* Value: Wert der dem Schlüssel (Key) zugeordnet wird


Einzelnes Element: $Hash-Name{Key}
Hash wird als Array angesprochen (es wird ja nur ein Element abgefragt → eine Skalare.
Key ist in {} eingeschlossen, statt wie beim Array in []


Alle Schlüssel: keys %Hash-Name
Rückgabewert ist ein Array mit den Schlüsseln


Alle Values: values $Hash-Name
Rückgabewert ist ein Array mit allen Values
Hinweis: Die Rückgabewerte sind in einer beliebigen Reihenfolge

Spezialvariablen

Bezeichner Bedeutung
$_Variable die genutzt wird, wenn keine Variable angegeben wurde

Wird genutzt zum Beispiel in for-each-Schleifen ohne Angabe einer Variable in der die Werte gespeichert werden oder wenn eingelesen wird und keine Variable angegeben wurde.

Das heißt man lässt bei Befehlen die eigentliche eine Variable voraussetzen die Variablenangabe weg

Funktionen

Name Erklärung
open()Öffnet eine Datei zum Lesen/Schreiben

Syntax: open (Filehandler, Operation, Datei)

  • Filehandler: Variable vom Typ Skalar, Hash oder Array oder Kanal (komplett groß geschrieben)
  • Operation: Für was wird die Datei geöffnet (kann man sich merken → Dateiname stellt die Datei dar → entweder geht der Pfeil dorthin ode rzeigt von dort weg). > Schreiben, < Lesen, » Anfügen, +> bzw. +< Lesen und Schreiben
  • Datei → Pfad zur Datei (kann entfallen wenn Filehandel den Pfad enthält)

Wenn Filehandler eine Skalare, Hash oder Array ist dann wird in diesen der File-Handler gespeichert.
Ist Filehandler ein Kanal repräsentiert dieser den Inhalt der Datei.

open gibt true oder false zurück.

Lesen aus einer Datei:

open(HANDLER,<,bla.txt);
$aus=<HANDLER>;
print "$aus";
close()Schließt eine Datei

Syntax: close FILEHANDLE;

Sonderfunktionen

Zeichenketten

Interpolation:

In Zeichenketten die in “ stehen wird nach Steuerzeichen und Variablen gesucht und diese vor Ausgabe/Benutzung der Zeichenkette entsprechend interpretiert (bei Variablen durch den Inhalt der Variable ersetzt).
Bei Zeichenketten die in ' entfältl die Interpolation, Steuerzeichen und Variablen werden nicht interpretiert, sondern als Text angesehen.

Externe Resourcen

perl.txt · Zuletzt geändert: 2014/09/07 18:23 (Externe Bearbeitung)