Kurz: Ein Skalar ($x) enthält eine Zahl, einen String oder eine Referenz. Perl wandelt je nach Operator automatisch um.
Teil des Kurses Perl
Skalare
Ein Skalar ($x) enthält eine Zahl, einen String oder eine Referenz. Perl wandelt je nach Operator automatisch um.
use strict; use warnings;
my $a = 10;
my $b = "5";
print $a + $b, "\n"; # numerisch: 15
print $a . $b, "\n"; # Textverkettung: 105
print "10" == 10.0 ? "gleich\n" : "ungleich\n";
print "abc" lt "abd" ? "kleiner\n" : "größer\n";
print 7 / 2, " ", int(7 / 2), " ", 7 % 3, " ", 2 ** 10, " ", -7 % 3, "\n";
print 10 <=> 5, " ", "a" cmp "b", "\n";
my $i = 5; $i++; $i += 10; $i *= 2;
print "$i\n";
print 0.1 + 0.2 == 0.3 ? "gleich\n" : "ungleich (Gleitkomma)\n";
print abs(-3), " ", sqrt(16), " ", int(3.9), " ", sprintf("%.2f", 3.14159), "\n";
print 1_000_000 + 0x1F + 0b101 + 0o17 + 017, "\n";Ausgabe:
15
105
gleich
kleiner
3.5 3 1 1024 2
1 -1
32
ungleich (Gleitkomma)
3 4 3 3.14
1000066Es gibt zwei Vergleichssätze: numerisch (== != < > <=>) und für Text (eq ne lt gt cmp). Wer sie verwechselt, bekommt Fehler ("abc" == "xyz" ist wahr, weil beide als 0 zählen!).
Strings
use strict; use warnings;
my $s = "Hallo Welt";
print length($s), " ", uc($s), " ", lc($s), " ", ucfirst(lc("PERL")), " ", lcfirst("ABC"), "\n";
print substr($s, 0, 5), "|", substr($s, -4), "|", index($s, "Welt"), "|", rindex($s, "l"), "\n";
print reverse($s) . "\n"; # der Punkt erzwingt Skalarkontext
print scalar reverse($s), "\n";
print "ab" x 3, "|", "-" x 10, "\n"; # Wiederholung
print join("-", 1..5), "\n";
print join(",", split(/,/, "a,b,c")), "\n";
my @w = split ' ', " viele Wörter hier ";
print scalar(@w), " Wörter: @w\n";
(my $kopie = $s) =~ s/Welt/Perl/;
print "$kopie\n";
print "Ergebnis: ${\ ($s . '!')}\n";
my $t = " getrimmt ";
$t =~ s/^\s+|\s+$//g;
print "[$t]\n";
print "Wert: @{[ 6 * 7 ]}\n"; # Ausdruck in String
print sprintf("%5s|%-5s|%05d|%.1f|%x|%b|%e", "ab", "cd", 42, 2.55, 255, 5, 1234.5), "\n";
print ord("A"), " ", chr(66), "\n";
chomp(my $zeile = "Text\n"); # entfernt Zeilenumbruch
print "[$zeile]\n";
my $w = "wort";
$w .= "e";
print "$w\n";
print "wahr\n" if "0.0"; # "0.0" ist wahr, "0" falsch
print "leer ist falsch\n" unless "";Ausgabe:
10 HALLO WELT hallo welt Perl aBC
Hallo|Welt|6|8
tleW ollaH
tleW ollaH
ababab|----------
1-2-3-4-5
a,b,c
3 Wörter: viele Wörter hier
Hallo Perl
Ergebnis: Hallo Welt!
[getrimmt]
Wert: 42
ab|cd |00042|2.5|ff|101|1.234500e+03
65 B
[Text]
worte
wahr
leer ist falschAchtung
In Perl sind
0,"0","",undefund die leere Liste falsch; alles andere ist wahr (auch"0.0","00").
here-docs und Zitieroperatoren
use strict; use warnings;
my $name = "Mia";
print <<"ENDE";
Hallo $name,
dies ist ein mehrzeiliger Text.
ENDE
print <<'ROH';
Hier wird $name nicht ersetzt.
ROH
print q(einfach 'zitiert' $name), "\n"; # wie '...'
print qq(doppelt "zitiert" $name), "\n"; # wie "..."
my @w = qw(rot grün blau); # Liste ohne Anführungszeichen
print "@w\n";Ausgabe:
Hallo Mia,
dies ist ein mehrzeiliger Text.
Hier wird $name nicht ersetzt.
einfach 'zitiert' $name
doppelt "zitiert" Mia
rot grün blauundef und defined
use strict; use warnings;
my $x;
print defined($x) ? "definiert\n" : "undef\n";
$x = 0;
print defined($x) ? "definiert (0)\n" : "undef\n";
my $y = $x // "Standard"; # // = defined-or
my $z;
$z //= "gesetzt";
my $w = $x || "Ersatz"; # || ersetzt auch 0
print "$y $z $w\n";
undef $x;
print defined($x) ? "ja\n" : "wieder undef\n";Ausgabe:
undef
definiert (0)
0 gesetzt Ersatz
wieder undefMerke
- Skalare: Zahl, String, Referenz; automatische Umwandlung
- Zwei Vergleichssätze:
== < >(Zahlen) undeq lt gt(Text) .verkettet,xwiederholt,length,substr,index,uc,lc,sprintf,join,split- Falsch:
0,"0","",undef;//für Standardwerte - Heredocs und
q(),qq(),qw()für Strings und Listen
Übungsaufgabe
Schreibe ein Skript, das einen Satz in Wörter zerlegt, jedes Wort großschreibt und wieder zusammenfügt.
Quiz zur Selbstkontrolle
Welcher Operator verkettet Strings in Perl?
- Der Punkt . (richtig)
- &
- ++
Wie vergleichst du Text auf Gleichheit?
- eq (richtig)
- ==
- ===
- equals
Welcher Wert ist in Perl wahr?
- “0.0” (richtig)
- “0”
- ""
- undef
Weiter im Kurs
Zurück: Einführung und erstes Skript
Weiter: Arrays und Hashes
Alle Kapitel: Perl im Überblick