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

Beitrag lesen

Hi,

Im logischen Kontext wird $rc folgend ausgewertet:
Welcher "logische Kontext"?

Das, was hinter dem "if" steht, das ist eine Bedingung (nicht das
"if" selbst, welches diese Bedingung auswertet und nach verzweigt).
Eine Bedingung ist ein Ausdruck, der als Ergebnis "wahr" oder "falsch"
liefern kann.

Nun ja, was eine Bedingung ist weiss ich ja z.B. "==", ($rc == 0), die Abfrage ist if, heisst ja auch in selfhtml8/cgiperl/sprache/bedingt.htm#if_else_elsif
"Bedingte Anweisungen mit if,..."
Nur, lieber Michael mein Problem war ja, das eben keine Bedingung da war, sondern nur if ($rc) dastand, drum heisst das Subjekt dieses Threads ja auch (mit "unbedingtem" if)! Kommt mein unsachlicher Humor wieder zum Vorschein, fällt mir schwer den ganz zu unterdrücken, wie wärs, wenn er würd' Dich ein kleinwenig entzücken? :-) #Neu-User

Doch zurück, Du beschreibst einen logischen Kontext, nach dem ich gefragt habe, aber Du gibst mir als Perl-Anfänger zuwenig Beschreibung, denn was hinter dem "if" bei DIR steht, weiss ich jetzt nicht genau. Steht da jetzt eine Bedingung wie diese ($rc == 0), oder steht da nur if ($rc)? #ich les grad das Posting vor dem Absenden nochmals durch, ($rc) ist ja selbst die Bedingung, oder?

Das, was die Klammern um das "$rc" herum legen, ist dessen Kontext -
nämlich die Auswertungsvorschrift, die auf das $rc angewendet wird.
Wenn Du $rc an eine andere Variable zuweisen würdest, dann wäre die
Vorschrift, diesen Wert unverändert zu übernehmen; im Kontext einer
Bedingung lautet die Vorschrift, den Wert auf "wahr" oder "falsch"
abzubilden.

Stop mal, ist der Kontext die Klammer, einmal die Bedingung!?
Meinst Du, dass so?: Im Kontext der Klammer, lautet die Bedingung, den Wert auf "wahr" oder "falsch" abzubilden."
Und würde das heissen, dass "if ($rc)" - soweit waren wir aber glaub ich schon - also die Anweisung "if" durch die Klammern einen Kontext zur Bedingung bekommt. Die Bedingung frägt: "$rc, bist Du wahr, oder unwahr?"
Worauf $rc vielleicht stoz antwortet: "Ich bin wahr!"
Aber somit wäre die Klammer, die ja eigentlich nur den Kontext für eine Bedingung zur Verfügung stellen sollte, selbst zur Bedingung mutiert, das stört mich. Ob die Variable mal Strings enthält, oder Zahlenwerte, sind doch peanuts. ;-)

Das ist in Perl etwas komplizierter zu verstehen als in Programmier-
sprachen, die definierte skalare Datentypen besitzen, wo also eine
Variable nur _entweder_ eine Zahl _oder_ eine Zeichenkette _oder_
was auch immer enthalten darf. In Perl (und auch in JavaScript)
darf eine skalare Variable irgendwas enthalten - und das führt dann
dazu, daß sich dessen Bedeutung in bestimmten Kontexten ändern kann:

Sind doch Problemen, die ich gar nicht hatte. :-)

Wenn Du einen String als Bedingung auswertest,

Redest Du jetzt davon ($rc)? Eine Bedingung ist für mich ein Operator.
Hmmmmm?
Bin wieder da, in "Einführung in Perl" (O'Reilly) S. 35, hab ich grad was gelesen.
Assoziativität ... von Operatoren. Als Erstes steht dort:

Assoziativität | Operatoren
------------------------------------------------------
links          | runde Klammern und Listen-Operatoren   # nur wo sind die ()? Die sind doch gemeint, oder?
------------------------------------------------------

Warum sagt das keiner? Sind Klammern  "()" nun schon Operatoren? Aber doch nur Präzedenz-Operatoren, oder?
Also jetzt bin ich etwas durcheinander, Operatoren waren für mich vorrangig die VergleichsOperatoren und eine ordentliche if, ja wie nenn ich das Ding jetzt? If-Kontrollstruktur! Hatte eine Bedingungsanweisung, für mich waren dies die VergleichsOperatoren.
Also, _"if" (wenn)_ ... _"<=" (kleiner gleich)_ ..., dann kommt die Anweisung.
Hmm? der Bedingungsausdruck muss wahr sein?
Also:

use self;
my $rc = 1;
if ($rc) {
print "Nah, hab ichs kapiert? Bravo, ja!\n";
          }
else
          {
print "Du totaler DAU! Du!\n";
          }

wird eben ein Wahr-
heitswert daraus, und umgekehrt kann aus einer Zahl ein String werden,
wenn beispielsweise eine String-Zusammenhängung darauf angewendet
wird. Man weiß also nie nur alleine aus der Ansicht der Variable,
als was deren Inhalt im nächsten Moment interpretiert wird ... nein,
das ist nicht die Sprache, die ich einem Einsteiger zum Lernen emp-
fehlen würde, aber für den Fortgeschrittenen erlaubt diese relative
Freiheit, bestimmte Dinge sehr flexibel zu handhaben und sehr kurz
und prägnant in Anweisungen zu schreiben.

Das liegt nur an der Didaktik, ein Programmier-Geni hats damit meistens schwer.

Wenn die Variable $rc durch if ausgewertet wird (und das wird sie,
auch wenn nur if ($rc) dasteht, also kein "sichtbarer" Operator),

Auch die runde Klammer drum herum ist in diesem Moment so eine Art
Operator.

So eine Art? Michael, les mal "Einführung in Perl" (O'Reilly) S. 35. :-)

$rc = 1 - 0;   # 1-0 soll 1 sein? Nach welcher Logik gehst Du hier vor?

Welchen Wert würdest Du denn vorschlagen?

Hat sich erledigt! :-)

Der Thread wandert bald ins Archiv, oder?

Archiviert wird als nächstes immer derjenige Thread, in dem am längsten
nicht mehr gepostet wurde. Nur keine Hektik ...

Na das geht manchmal aber innerhalb von Stunden, eigne Erfahrung, brauch für manche Postings etwas länger und schwubs, ist der Thread weg.:-(

Viele Grüße
Thomas N == Neu-User
:-)