Thomas N: Einfacher Formmailer, Danke-Seite als .pl, mit "unbedingtem" if

Beitrag lesen

Hi,

Kap. 4 ist bei mir Kontrollstrukturen, und davon gleich die zweite Seite, da steht das ganze gut erklärt.

Bei mir in Kapitel 2: Skalare Daten, S.37f (Kontrollstrukturen mit if) und auch ganze gut erklärt ;)

Mach dir nicht so einen Kopf darum, warum das denn jetzt wirklich so ist, das gehört einfach zu den Eigenheiten von Perl.

Was weisst Du denn was ich vorhabe? ;)

andere Programmiersprachen kennen Variablentypen, zB Zahl (Ganzahl (int) Kommazahl (float,...), Text (String), Wahrheitswert (boolean, hat nur Werte true oder false)) und andere, die jetzt erstmal nebensächlich sind.

"Ansatzweise" ist mir das klar, hab ja schon mal einen 4TageKurs für c++ in der VHS gemacht, fand ich allerding didaktisch nicht so toll...

Perl kennt nur einen Variablentyp, den Skalar.

Falsch! ;) Nur wenn Du hier Datentyp meinst stimmt das (S.52, Kamel 3.Aufl.) Denn (S.54, Kamel) heisst es: "Jeder Variablentyp (das bedeutet es mus mehrere geben, Anm. d. Posters) wird "grammatikalisch gesehen" durch ein "komisches Zeichen" eingeleitet."

Wenn du in der anderen Programmiersprache einen Text mit einer Zahl "verknüpfen" willst (zB bei der Ausgabe) musst du eine Variable umwandeln.

Perl macht das alles automatisch. Folgender Code ist zulässig, vielleicht aber nicht besonders sinnvoll:

my $var = 'blah';
$var++;
print $var;
(jedenfalls, wenn du ohne -w oder use warnings arbeitest)

Perl versucht hier auf Deubel komm raus den Text in eine Zahl umzuwandeln, und zwar ohne es dir explizit zu sagen. Das beispiel oben gibtg 'bla' aus (warum weiss ich nicht, ist auch einfach sinnbefreit).

Du meinst es sollte eine Zahl kommen? So entnehme ich das Deinem nächsten Abschnitt.

Was Perl konkret macht, musst du am Kontext erkennen. Weil du hier einen Operator (++) anwendest, der auf einer Zahl basiert, wird der Text in eine Zahl umgewandelt (kannst du im Übrigen auch durch die funktion int() manuell machen) und um eins erhöht.

Und, wie gesagt, im logischen Kontext wird aus der Variablen ein boolean gemacht (mit Hilfe der genannten Regeln). Boolean bei Perl heisst 1 oder 0 (wahr oder falsch), damit ist alles erklärt. Alles was du tatsächlich wissen musst, ist warum Perl das macht (weil es dir die Arbeit mit Variablentypen ersparen will) und wann es das macht (wenn der Kontext es erfordert). Das ist alles.

Schluss: Du meinst "print $var;" sollte 2 ausgeben, weil "'blah'" true ist, also 1 wird und dann inkrementiert werden sollte?

Dann "weiss ich jetzt alles"! ;)
Und kann mich mal wieder der Praxis zuwenden.

Danke+viele Grüße
Thomas N == Neu-User