Skalare DatenPerl

Die einfachste Art von Daten, mit denen Perl arbeitet sind Zahlen und Zeichenketten (Strings).

SeitenanfangSeitenendeZahlen

In Perl können Zahlen sowohl als Ganzzahlen (Integer) als auch als Gleitkommazahlen (Float) dargestellt werden.

# Integer sind:
0
-1024
412
12481923512351235 # etwas unübersichtlich
12_481_923_512_351_235 # schon besser

# Floats sind:
2.7828
-0.01
1.3e-6 # == 0,0000013
17E7   # == 170000000

... und das sollte schon aufgefallen sein:

Bemerkung: Perl stellt intern Integer-Zahlen als Float dar! Dies bleibt aber ohne Auswirkungen für den Programmierer - falls er nicht unbedingt nach Befehlen sucht, die ganze Zahlen verarbeiten.

SeitenanfangSeitenendeStrings

Ein String ist eine Reihe von Zeichen, die entweder mit ' oder " begrenzt sind. Diese Apostrophe sind kein Teil des Strings, sondern dienen nur dazu einen String zu kennzeichnen.
"moin moin"  # neun Buchstaben: m, o, ...
'hoch'       # vier Buchstaben: h, o, c, h
"99"         # zwei Ziffern als String
""           # leerer String
"eins\tzwei" # eins "Tabulator" zwei
'don\'t'     # don't
'a\\b'       # a\b

# folgende drei Strings stimmen überein:
"alles\nklar" # \n wird als "neue Zeile" interpretiert
"alles
klar"
'alles
klar'         # ebenso echte Zeilenumbrüche

# doch dieser String ist anders:
'alles\nklar'
  # \ und n ergeben keine neue Zeile,
  # sondern zwei einzelne Zeichen

... und was fällt auf?

SeitenanfangSeitenendeSonderzeichen für "-Strings

Sonderzeichen werden mit einem Backslash eingeleitet. Hier eine Liste davon:

Ausdruck
\n neue Zeile (newline)
\r Rücklauf (return)
\t Tabulator
\f neue Seite (formfeed)
\b Backspace
\v vertikaler Tabulator
\a Tonsignal
\e Escape
\007 ASCII-Wert im Okatalsystem (\DreistelligeOktalzahl); hier: 007=Tonsignal
\x7f ASCII-Wert im Hexadezimalsystem (\xZweistelligeHexadezimalzahl); hier 7f=Del
\cC jede Contol-Sequenz \cZeichen; hier Control-C
\\ Backslash
\" doppelter Apostroph
\l der naechste Buchstabe wird klein geschrieben; Bsp.: "A\lBC"="AbC"
\L alles bis zum Sonderzeichen \E wird klein geschrieben; Bsp.: "AB\uCDE\EF"="ABcdeF"
\u der naechste Buchstabe wird groß geschrieben; Bsp.: "a\ubc"="aBc"
\U alles bis zum Sonderzeichen \E wird groß geschrieben; Bsp.: "ab\Ucde\Ef"="abCDEf"
\E beendet \L bzw. \U
(Quelle: Einführung in Perl - von Randal L. Schwartz)
 

SeitenanfangSeitenendeOperatoren

Ein Operator (z. B. +) macht aus einen oder zwei Werten (z. B. aus zwei Zahlen) einen neuen Wert (Bsp.: 4+5 liefert 9).

Operatoren für Zahlen sind:

Operator Beispiel Ergebnis Bemerkung
+ 3+7 10
- 2.7-5 -2.3
* 2*5.3 10.6
/ 1.2/0.3 4
** 2**3 8 Potenzierung: 23
% 10%3 1 Achtung: Beide Werte werden vorher auf ganze Zahlen abgerundet; Bsp. 10.2%3.7=1
== 7==8 false Test auf Gleichheit
!= 7!=8 true Test auf Ungleichheit
< 2<1 false
<= 3.5<=3.5 true
>= 4>3.5 true
> 2e12>-12 true
(Quelle: Einführung in Perl - von Randal L. Schwartz)
 
Bemerkung: Die Werte true  und false  werden später noch genauer behandelt.

Operatoren für Strings sind:

Operator Beispiel Ergebnis Bemerkung
. "hi"." "."world!" "hi world!" Zusammenhängen von Strings
eq "abc" eq "abc" true entspricht == bei Zahlen
ne "abc" ne "abc" false != bei Zahlen
lt "30" lt "7" true < bei Zahlen
le "3" le "33" true <= bei Zahlen
gt "aaaa" gt "b" false > bei Zahlen
ge "99" ge "99" true >= bei Zahlen
cmp "99" cmp "99" 0 liefert -1, 0, 1 je nachdem, ob das linke Argument kleiner, gleich oder größer als das rechte Argument ist
x "abc" x 3 "abcabcabc" Stringwiederholungen
(Quelle: Einführung in Perl - von Randal L. Schwartz)
 
"99"+1;    # liefert 100
1+"99";    # liefert 100
1+" 99aX"; # liefert 100; Perl überliest führende
           # Leerzeichen und nachfolgende Buchstaben, falls
           # ein String als Zahl interpretiert werden soll!

"99".1;    # liefert: "991"

# es gibt eine Fehlermeldung bei:
1."99";    # funktioniert nicht, da Perl nach dem
           # Dezimalpunkt eine Ziffer erwartet!
Bemerkung: Perl kennt eigentlich nur einen Typ von skalarer Variable - eben eine skalare Variable. Es kommt auf die Umgebung der Variable an, wie Perl eine Variable interpretieren soll. Perl interpretiert jedoch eine skalare Variable erstmal als String. Wenn die Umgebung der Variablen eine Zahl erfordert, dann wird die skalare Variable als Zahl benutzt.

SeitenanfangSeitenendeRangfolge der Operatoren

Wie in der Mathematik kann es auch beim Programmieren Komplikationen geben, wo erst einmal nicht so sicher ist, was gemacht werden soll. Zum Beispiel kann folgender Ausdruck 3+4*5 zwei Ergebnisse liefern: 35 oder 23. Wie in der Mathematik entscheidet Perl sich hier für die Punkt-vor-Strich-Regel (d. h. * hat höheren Rang als +). Doch gibt es - wie gesehen - viel mehr Operatoren als nur + und *. Deshalb wird eine Liste, in der die Rangfolge der Operatoren festgehalten ist, zur Hilfe gezogen. Außerdem wird die Assoziativität mit angegeben - auf die kommen wir sofort zu sprechen.

Die Operatoren sind hier nach Wichtigkeit bzw. Rang geordnet. Je weiter unten ein Operator in dieser Tabelle steht, desto höher ist sein Rang. Operatoren in der gleichen Zeile sind vom gleichen Rang. (Einige der Operatoren in der Tabelle sind noch nicht bekannt. Ferner können nicht alle auf skalare Daten angewendet werden.)

Assoziativität Operator(en)
keine die Listen-Operatoren
links , (Komma)
rechts +=, = und andere Zuweisungsoperatoren
rechts ?: (tertiärer if/then/else - Operator)
keine .. (Bereichsoperator, Listenkonstruktor)
links || (logisches Oder)
links && (logisches Und)
links |, ^ (bitweises Oder, bitweises exklusives Oder)
links & (bitweises Und)
keine ==, !=, <=>, eq, ne, cmp (gleich-Operatoren)
keine <, <=, >, >=, lt, le, gt, ge (ungleich-Operatoren)
keine uniäre Operatoren - wie z. B. Funktionen mit einem Argument
keine -r und andere (Operatoren für Dateitests - ab Perl 5 sind diese auf der gleichen Stufe wie die unitären Operatoren)
links <<, >> (Bit-Verschiebung)
links +, -, . (plus, minus, Aneinanderhängen von Strings)
links *, /, %, x (mal, geteilt, modulo, Wiederholung von Zeichenketten)
links =~, !~ (stimmt überein, stimmt nicht überein)
rechts ** Potenzierung
rechts !, ~, - (logisches Nicht, bitweises Nicht, numerische Verneinung)
keine ++, -- (automatische Hoch- und Herunterzählen; als Präfixoperator)
(Quelle: Einführung in Perl - von Randal L. Schwartz)
 

Beispiel für verschiedenrangige Operatoren (die Assoziativität spielt keine Rolle):

3*4**5   # 3*(4**5), 3*1024, 3072

Bei Klammerung mit ( und ) kann man wie in der Mathematik die Rangfolge der Operatoren beieinflussen. Im obigen Beispiel muss man nur 3+4 in Klammern setzen, um 35 zu erhalten. Also (3+4)*5 ergibt 35. Damit wird zuerst der Term innerhalb der Klammer ausgewertet (nach den üblichen Regeln) und mit dem Ergebnis weitergerechnet. Perl verhält sich hier analog.

Je höher der Rang eines Operators ist, desto früher wird dieser ausgeführt. Bei gleichrangigen Operatoren wird die Reihenfolge der Operationen über die angegebene Assoziativität bestimmt.

Beispiel für gleichrangige Operatoren, die Assoziativität des Operators ist rechts:

3**4**5   # 3**(4**5), 3**1024, ca. 3,734e+488

Beispiel für gleichrangige Operatoren, die Assoziativität des Operators ist links:

3-4+5     # (3-4)+5, -1+5, 4

Seitenanfang FehlermeldungHilfe zur Fehlermeldung © 2001-2003 Email an den AutorPerl, Lehrstuhl Mathe II, Uni Bayreuth