icancode.de

Perl

Perl Crashkurs – Grundlagen

Veröffentlicht am .

Perl Crashkurs – Grundlagen

Einleitung

Da ich mich mehr oder weniger gezwungener Maßen mit Perl rumschlagen darf, lass ich euch einfach dran teilhaben und schreib euch mal einen kleinen Crashkurs. Die hier erwähnten und weiteren Beispielcode findet ihr auf GitHub.

Hallo Welt

Fangen wir mir dem einfachsten an. Hallo Welt!

#!usr/bin/env perl

print "Hello World!\n"

Skripte ausführen

Um unsere Skripte auszuführen, haben wir zwei Möglichkeiten:

Entweder rufen wir sie über das Programm perl in der Kommandozeile auf:

perl skript.pl

Oder wir machen sie zu einem ausführbaren Programm.
Dazu müssen unsere Dateien mit #!usr/bin/env perl beginnen
(siehe oben). Anschließend muss die Datei ausführbar gemacht werden, was mit dem chmod Befehl zu erreichen ist. Danach kann das Programm ausgeführt werden.

chmod +x skript.pl  #Rechte vergeben

./skript.pl         #Skript ausführen

Variablen

Perl ist eine typenlose Sprache. Es muss demnach nicht vorher spezifiziert werden, was der Inhalt einer Variable ist.

Was in Java so aussieht:

String text = "Das ist ein Text";
int number = 123;

könnte in Perl z.B. so aussehen:

$text = "Das ist ein Text";
$number = 123;

Grundlegend ist hierbei anzumerken, dass Perl drei Typen von Variablen kennt. Skalare, Arrays und Hashes.

Skalare

Skalare sind einfache Werte. Beispielsweise Strings, Integers usw. Normalerweise ist alles, was euch in Perl so vor die Füße fällt ein Skalar.

Arrays

Arrays sind eine Sammlung von Skalaren. Im Speziellen eine geordnete Abfolge von Skalaren.

Hashes

Hashes sind eine ungeordnete Ansammlung von Skalaren. Jedes Skalar bekommt einen Key zugeordnet, mit dem es identifiziert werden kann. Keys sind hierbei immer Strings.

Operationen

arithmetisch

  • Grundrechenarten: +,-,*,/
  • Modulo: %
  • Potenzen: **

String

  • zusammenfügen: .

Sonderzeichen

Um ein Sonderzeichen, wie z.B. $ auszugeben, muss dieses mit einem \ (Backslash) escaped werden.

print "Joe User schuldet mir \$123"

# Joe User schuldet mir $123 

pre- & post-Inkrement

Die Inkrementierschreibweise mit ++ ist weit verbreitet. Oft wird das, sog. Post-Inkrement verwendet: i++
Dabei wird die Variable erst nach der Ausweitung erhöht.

Betrachte dazu folgendes Beispiel:

$zahl = 5;
$multiplikator = 7;

$zahl *= $multiplikator++;  # 35

Das erwartete Ergebnis wäre eigentlich 40. Das tatsächliche Ergebnis ist aber 35. Die Erklärung ist simpel. Es wird erst die Rechenoperation (5 * 7) ausgeführt und anschließend der Multiplikator um eins erhöht. Dieser ist danach auch 8 und nicht 7.

Was also eigentlich passiert:

#$zahl *= $multiplikator++;

$zahl = $zahl * $multiplikator;
$multiplikator += 1;

Arbeitet man nun mit einem Pre-Inkrement sieht der Code eigentlich so aus:

# $zahl *= ++$multiplikator;

$multiplikator += 1;
$zahl = $zahl * $multiplikator;

Funktionen auf Strings

Länge

Um die Länge eines Strings zu ermitteln, kann die Funktion length() verwendet werden.

$laenge = length($string);

Position im Text

Die Position eines Strings im Text wird mit der Funktion index($input, $pattern) berechnet.
Dabei ist zu beachten, dass zum einen bei 0 angefangen wird zu zählen und zum anderen ein -1 zurückgegeben wird, wenn der String nicht gefunden wurde.

$position = index("Das ist Perl", "ist");

Substrings und Textersetzung

Um einen Text zu extrahieren, wird auf die Funktion substr() zurückgegriffen. Deren Verhalten ist abhängig von der Anzahl der Parameter die sie bekommt.

Text ab einer bestimmten Stelle

Um den Text ab einer bestimmten Position auszugeben, werden 2 Parameter verwendet. Der eigentliche Text und die Position an der begonnen werden soll.

$tail = ($text, 10);

Gibt man als Startstelle eine negative Zahl an, kann von hinten gezählt werden. Damit wird nicht die Startposition, sondern die Anzahl der Zeichen definiert, die ausgegeben werden soll.

$tail = ($text, -4);

Sollen drei Buchstaben ab der zehnten Position ausgegeben werden, erhält substr() einen weiteren Parameter, der einfach angehängt wird.

substr($input,$start,$anzahl);

substr($input, 10 , 3);

Text ersetzen

Auch das Ersetzen von Text ist mit substr() möglich. Dazu bekommt es vier Parameter.
Haben wir z.B. den String "Hallo Welt" und wollen nun "Hallo" mit "Hi" ersetzen, gehen wir wie folgt vor:

$hallo = "Hallo Welt";

$alt = substr($hallo, 0, 5, "Hi");

Es werden nun, ausgehend von der Stelle 0, die folgenden 5 Zeichen mit "Hi" ersetzt. In $hallo steht nun "Hi Welt". Interessant ist nun auch der Rückgabewert von substr() dieser ist nämlich der ersetzte String, nicht das Ergebnis der Operation. In $alt steht nun also Hallo.

Warnungen & lokale Variablen

Um einen besseren Stil zu gewährleisten, können wir die Module strict und warnings benutzen. Wie Module im einzelnen funktionieren, sei hier erstmal außen vor gelassen.
Unsere Preamble sieht nun also wie folgt aus:

#!usr/bin/env perl

use strict;
use warnings; 

Der Compiler wird uns nun Warnungen ausspucken, wenn ihm etwas nicht gefällt. Unter anderem wird er uns zwingen, Variablen im Kontext zu definieren. Dazu verwenden wir das Schlüsselwort my.
Mit my definierte Variablen sind lokale Variablen.

my $sharona = "The Knack";
Rico Magnucki

Rico Magnucki

http://magnucki.de

21st Century Digital Boy und Blog-Gründer. Studiert naturwissenschaftliche Informatik in Bielefeld. Auf dem Blog ist er der Ansprechpartner für LaTeX, schreibt Tutorials, dreht die Videos für YouTube und durchforstet das Internetz nach spannenden Dingen.

Navigation