Einfacher Formmailer, Danke-Seite als .pl, mit foreach?
Thomas N
- perl
Hallo,
der einfache Formmailer, Danke-Seite als .pl?
ich will die Eingaben des Formulars auf der Danke-Seite ausgeben und habe folgendes gedacht:
__________________________________________________________________________________
foreach $zeile (param)
{
print "<font size=-1> $zeile: ",param(),"<br></font>\n";
}
_____________
Damit bekomme ich von jedem Eingabefeld des Formulars den "internen Bezeichnernamen" - das wird hier so genannt
http://selfhtml.teamone.de/html/formulare/eingabe.htm#felder - der Angabe name= aufgelistet z.B.:
anrede:
vorname:
name:
str.:
str.nr.:
plz:
ort:
email:
__________________________________________________________________________________
Nun will ich auch mit "foreach" die "Parameter" - nennt man das so? - der "internen Bezeichnernamen" aufgelistet
haben, nur so funktioniert es z.B. leider nicht, könnte doch aber eigentlich, wenn es wie oben auch geht, oder?:
$query = new CGI;
$names = $query->param;
foreach($names)
{
print "<font size=+1> $names:<br></font>\n";
}
Auf die einzelnen kann ich z.B. mit ,param('vorname'), ja zugreifen/ausgeben.
Viele Grüsse
Thomas N
Hallo,
der einfache Formmailer, Danke-Seite als .pl?
ich will die Eingaben des Formulars auf der Danke-Seite ausgeben und habe folgendes gedacht:
__________________________________________________________________________________
foreach $zeile (param)
{
print "<font size=-1> $zeile: ",param(),"<br></font>\n";
}
_____________
Damit bekomme ich von jedem Eingabefeld des Formulars den "internen Bezeichnernamen" - das wird hier so genannt
http://selfhtml.teamone.de/html/formulare/eingabe.htm#felder - der Angabe name= aufgelistet z.B.:
anrede:
vorname:
name:
str.:
str.nr.:
plz:
ort:
email:
__________________________________________________________________________________Nun will ich auch mit "foreach" die "Parameter" - nennt man das so? - der "internen Bezeichnernamen" aufgelistet
haben, nur so funktioniert es z.B. leider nicht, könnte doch aber eigentlich, wenn es wie oben auch geht, oder?:$query = new CGI;
$names = $query->param;foreach($names)
{
print "<font size=+1> $names:<br></font>\n";
}Auf die einzelnen kann ich z.B. mit ,param('vorname'), ja zugreifen/ausgeben.
Viele Grüsse
Thomas N
--
--
"Multiple exclamation marks", he claimed, "are a sure sign of a diseased mind."
Terry Pratchett
use Mosche;
Ich wunder mich, warum hier meine Antwort nicht beachtet wird - dabei ist sie gar nicht gepostet worden - habe mich bei meinem ersten Versuch mit SBU+gvim wohl ein wenig vertippt (das heisst ab jetzt üben). Ich sollte mir doch wohl öfters meine eigenen Postings ansehen.
$query = new CGI;
$names = $query->param;
In $names steht dann die Anzahl der Parameter. Statt '$' sollte hier ein '@' hin.
foreach($names)
Und hier ganz genauso: s/$/@/;
{
print "<font size=+1> $names:<br></font>\n";
Und statt $names muss hier $_ hin.
}
use Tschoe qw(Matti);
Hallo Thomas,
Nun will ich auch mit "foreach" die "Parameter" - nennt man das so? - der "internen Bezeichnernamen" aufgelistet
haben, nur so funktioniert es z.B. leider nicht, könnte doch aber eigentlich, wenn es wie oben auch geht, oder?:
Guck dir mal das Beispiel auf http://selfhtml.teamone.de/cgiperl/module/cgi.htm#formularverarbeitung an - da geschieht genau das: "Traversierende" Ausgabe aller Feldnamen mit zugehoerigen Werten.
viele Gruesse
Stefan Muenz
Hallo Stefan,
Nun will ich auch mit "foreach" die "Parameter" - nennt man das so? - der "internen Bezeichnernamen" aufgelistet
haben, nur so funktioniert es z.B. leider nicht, könnte doch aber eigentlich?
Guck dir mal das Beispiel auf http://selfhtml.teamone.de/cgiperl/module/cgi.htm#formularverarbeitung an - da geschieht genau das: "Traversierende" Ausgabe aller Feldnamen mit zugehoerigen Werten.
So wirst Du mich nicht los! Da schickt er mich vom Regen in die Traufe, Objektorientiert, wo ich grad mal
mitbekommen hab was 'ne Variable ist?
So sieht mein 'comments.pl' jetzt aus:
________________________________________________________________
#!/usr/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);
my @Feldnamen = $cgi->param();
print $cgi->header(),
$cgi->start_html('CGI-Feedback');
#$cgi->h1('CGI-Feedback vom Programm ',$cgi->i('comments.pl'));
print "<table BORDER=1 cellspacing=0>\n";
foreach my $Feld (@Feldnamen)
{
print "<tr bgcolor=#CFCFCF><td>" ,$Feld, "1</td></tr>\n";
#print $Feld, ": ";
print "<tr bgcolor=#EFEFEF><td>", $cgi->param($Feld), "2</td></tr>\n"; #"<br>";
}
print "</table>\n";
print $cgi->end_html();
________________________________________________________________
Aber ich will ja, dass es so aussieht (CGI-Ausgabe):
<table>
-------------------------------------
| | |
| Wert/Bezeichnerwert | Feldnamen | # <tr bgcolor=#CFCFCF>
| | |
-------------------------------------
| | |
| Wert/Bezeichnerwert | Feldnamen | # <tr bgcolor=#EFEFEF>
| | |
-------------------------------------
usw...
Dafür bräucht ich aber dann irgedwie "ZWEI Schleifen", weil ich (Wert und Feldnamen) in eine Zeile
bringen muss, oder nicht?
Eigentlich? ...ist das Problem die abwechselnde (bgcolor), die macht mir das schwierig!
So irgendwie, nur halt schön im wechsel müsste das geprintet werden:
print "<tr bgcolor=#CFCFCF><td>",$Feld, "</td><td>",$cgi->param($Feld),"</td></tr>\n";
print "<tr bgcolor=#EFEFEF><td>",$Feld, "</td><td>",$cgi->param($Feld),"</td></tr>\n";
Was hab ich verpasst? Bei Aschenputtel heisst es: "Eins ins Kröpfen eins ins Töpfchen"
Und in PERL?
Die eine ZEILE, andre Zeile, die eine ZEILE, andre Zeile, die eine ZEILE, andre Zeile, usw...
Wer hat lust mal kurz zu helfen? :-)
Viele Gruesse und dann gute Nacht
Thomas N
use Mosche;
Dafür bräucht ich aber dann irgedwie "ZWEI Schleifen", weil ich (Wert und Feldnamen) in eine Zeile
bringen muss, oder nicht?
Nöö - du willst doch in eine Zeile die Werte reintun, und im jeden Schleifenschritt bekommst du einen neuen Feldnamen und daraus resultierend einen neuen Feldwert (mit param() ).
Eigentlich? ...ist das Problem die abwechselnde (bgcolor), die macht mir das schwierig!
Du solltest erst mal mit dem ersten Schritt anfangen und das verstehen, anstatt als Anfänger (ohne dich beleidigen zu wollen) gleich zwei Schritt auf einmal zu machen.
Ich habe dein Beispiel entsprechend korrigiert.
my @Feldnamen = $cgi->param();
print $cgi->header(),
$cgi->start_html('CGI-Feedback');
#$cgi->h1('CGI-Feedback vom Programm ',$cgi->i('comments.pl'));
print "<table BORDER=1 cellspacing=0>\n";
my $rc = 0;
foreach my $Feld (@Feldnamen)
{
# Für diese Zeile passende Farbe aussuchen
my $color;
if ($rc) {
$color = '#CFCFCF';
$rc = 0;
} else {
$color = '#EFEFEF';
$rc = 1;
}
my $Value = $cgi->param($Feld);
print <<EOF;
<tr>
<th bgcolor="$color">$Feld</th>
<td bgcolor="$color">$Value</th>
</tr>
EOF
}
print "</table>\n";
use Tschoe qw(Matti);
Servus,
Du solltest erst mal mit dem ersten Schritt anfangen und das verstehen, anstatt als Anfänger (ohne dich beleidigen zu wollen) gleich zwei Schritt auf einmal zu machen.
Du solltest mal nicht so "steif" sein, (ohne dich beleidigen zu wollen). ;-) Andererseits freut es mich natürlich, wenn sich jemand um mich als Anfänger Sorgen macht.
Ich habe dein Beispiel entsprechend korrigiert.
(Die Korrektur hab ich mal rausgenommen, braucht so viel Platz) :)
Sieht ordentlich aus - auch für mich als Anfänger - und funktionieren tuts obendrein, prima gemacht von Dir!
Ich war natürlich nicht untätig und habe eine Anfängerlösung kreiert! ;)
Wie heisst es so schön?: TMTOWTDI
Sieht auch ordentlich aus, oder? Funktionieren tuts auch, prima, oder? :)
print "<tr bgcolor=#CFCFCF><td>",$Feldnamen[3], "</td><td>",$cgi->param('Vorname'),"</td></tr>\n";
print "<tr bgcolor=#EFEFEF><td>",$Feldnamen[4], "</td><td>",$cgi->param('Name'),"</td></tr>\n";
print "<tr bgcolor=#CFCFCF><td>",$Feldnamen[5], "</td><td>",$cgi->param('Strasse'),"</td></tr>\n";
print "<tr bgcolor=#EFEFEF><td>",$Feldnamen[6], "</td><td>",$cgi->param('HausNr.'),"</td></tr>\n";
print "<tr bgcolor=#CFCFCF><td>",$Feldnamen[7], "</td><td>",$cgi->param('PLZ'),"</td></tr>\n";
print "<tr bgcolor=#EFEFEF><td>",$Feldnamen[8], "</td><td>",$cgi->param('Ort'),"</td></tr>\n";
print "<tr bgcolor=#CFCFCF><td>",$Feldnamen[9], "</td><td>",$cgi->param('email'),"</td></tr>\n";
print "<tr bgcolor=#EFEFEF><td>",$Feldnamen[10], "</td><td>",$cgi->param('http'),"</td></tr>\n";
print "<tr bgcolor=#CFCFCF><td>",$Feldnamen[11], "</td><td>",$cgi->param('Kommentar'),"</td></tr>\n";
print "<tr bgcolor=#EFEFEF><td>",$Feldnamen[12], "</td><td>",$cgi->param('Prospekt'),"</td></tr>\n";
print "<tr bgcolor=#CFCFCF><td>",$Feldnamen[13], "</td><td>",$cgi->param('Newsletter'),"</td></tr>\n";
Vielen Dank für die Hilfe... bis zum nächsten mal... :)
Thomas N
Hi Thomas,
Ich war natürlich nicht untätig und habe eine Anfängerlösung kreiert! ;)
Wie heisst es so schön?: TMTOWTDI
Sieht auch ordentlich aus, oder? Funktionieren tuts auch, prima, oder? :)
print "<tr bgcolor=#CFCFCF><td>",$Feldnamen[3], "</td><td>",$cgi->param('Vorname'),"</td></tr>\n";
print "<tr bgcolor=#EFEFEF><td>",$Feldnamen[4], "</td><td>",$cgi->param('Name'),"</td></tr>\n";
print "<tr bgcolor=#CFCFCF><td>",$Feldnamen[5], "</td><td>",$cgi->param('Strasse'),"</td></tr>\n";
print "<tr bgcolor=#EFEFEF><td>",$Feldnamen[6], "</td><td>",$cgi->param('HausNr.'),"</td></tr>\n";
print "<tr bgcolor=#CFCFCF><td>",$Feldnamen[7], "</td><td>",$cgi->param('PLZ'),"</td></tr>\n";
print "<tr bgcolor=#EFEFEF><td>",$Feldnamen[8], "</td><td>",$cgi->param('Ort'),"</td></tr>\n";
print "<tr bgcolor=#CFCFCF><td>",$Feldnamen[9], "</td><td>",$cgi->param('email'),"</td></tr>\n";
print "<tr bgcolor=#EFEFEF><td>",$Feldnamen[10], "</td><td>",$cgi->param('http'),"</td></tr>\n";
print "<tr bgcolor=#CFCFCF><td>",$Feldnamen[11], "</td><td>",$cgi->param('Kommentar'),"</td></tr>\n";
print "<tr bgcolor=#EFEFEF><td>",$Feldnamen[12], "</td><td>",$cgi->param('Prospekt'),"</td></tr>\n";
print "<tr bgcolor=#CFCFCF><td>",$Feldnamen[13], "</td><td>",$cgi->param('Newsletter'),"</td></tr>\n";
1. Was hältst Du von CSS-Klassen statt hart codierten
Farben?
2. Was hältst Du von einer Schleife statt 13 sperrigen
Funktionsaufrufen?
Welche Farbe die aktuelle Zeile haben soll, läßt sich
über deren Nummer modulo 2 bestimmen.
Viele Grüße
Michael
Hi,
- Was hältst Du von CSS-Klassen statt hart codierten
Farben?- Was hältst Du von einer Schleife statt 13 sperrigen
Funktionsaufrufen?
Welche Farbe die aktuelle Zeile haben soll, läßt sich
über deren Nummer modulo 2 bestimmen.
Erst bitte im Thread lesen um was es geht und dann kannst Du nochmals überlegen, ob Du die altklugen Sprüche wirklich loswerden willst!
Was "hältst" Du von ein bisschen mehr Humor?
Die Energie des Verstehens und das Wesen der Programmierung, könntest Du noch etwas drüber nachdenken, da gibst glaub ich noch einiges für Dich zu entdecken! ;-)
Aber nichts für ungut, Du hast es im Grunde Deines Herzens sicher nur gut gemeint, oder?
Viele Grüße
Thomas N
Hi Thomas,
- Was hältst Du von CSS-Klassen statt hart codierten
Farben?- Was hältst Du von einer Schleife statt 13 sperrigen
Funktionsaufrufen?
Erst bitte im Thread lesen um was es geht
Du hast eine eigene Lösung gebaut, obwohl Dir eine bessere angeboten
wurde. Das ist für sich genommen okay, aber Deine Lösung ließe sich
verbessern.
Da Du an eigenen Experimenten interessiert zu sein scheinst, wollte
ich Dir weitere Schritte dazu vorschlagen.
und dann kannst Du nochmals überlegen, ob Du die altklugen Sprüche
wirklich loswerden willst!
Ich habe Dich gefragt, was Du davon hältst.
Nicht mehr und nicht weniger.
Wäre es Dir lieber gewesen, wenn ich geschrieben hätte:
"Du Arsch, Deine Selbstbaulösung ist totaler Müll - zeilenweise
überflüssiger duplizierter Code, der sich von einem richtigen
Programmierer mit einer dreizeiligen Schleife realisieren ließe"?
Was "hältst" Du von ein bisschen mehr Humor?
Ich versuche gerade, zu begreifen, was Du eigentlich von mir willst.
Und ob ich in diesem Forum überhaupt noch weiter posten soll.
Die Energie des Verstehens und das Wesen der Programmierung,
könntest Du noch etwas drüber nachdenken, da gibst glaub ich noch
einiges für Dich zu entdecken! ;-)
Bist Du Dir bewußt, _wem_ Du das gerade sagst?
Aber nichts für ungut, Du hast es im Grunde Deines Herzens sicher
nur gut gemeint, oder?
Ich wollte, ich könnte das von Dir auch annehmen.
Mit gequälten Grüßen
Michael
Hallo Michael,
Und ob ich in diesem Forum überhaupt noch weiter posten soll.
Tss tss, man glaubt dir keine Rueckzuege mehr! Welcome to Hotel California *g*
Bist Du Dir bewußt, _wem_ Du das gerade sagst?
Nee, sicher nicht. Wie sollte er das auch - als Neu-User? Er weiss einfach nicht, was du bereits fuer diesen Raum geleistet hat. Nimm es einfach als "konstruktive Kritik". Zeig ihm vielleicht einfach mal, wie so eine Schleife aussehen kann. Ist naemlich durchaus eine nicht voellig triviale und interessante Uebung, die auch andere interessieren koennte.
viele Gruesse
Stefan Muenz
Hallo,
Michael:»» »» Bist Du Dir bewußt, _wem_ Du (damit bin ich gemeint) das gerade sagst?
Stefan»» Nee, sicher nicht. Wie sollte er (damit bin wieder ich gemeint) das auch - als Neu-User? Er weiss einfach nicht, was du bereits fuer diesen Raum geleistet hat. Nimm es einfach als "konstruktive Kritik". Zeig ihm vielleicht einfach mal, wie so eine Schleife aussehen kann. Ist naemlich durchaus eine nicht voellig triviale und interessante Uebung, die auch andere interessieren koennte.
Prima Idee, aber bitte wirklich mit mir zusammen. Meinen "Humor" werde ich auch seriöser handhaben, versprochen. :-)
Wobei, wie sie ( die Schleife) aussehen kann hat Matti ja schon gezeigt.
Also ich überleg mir mal ein paar Fragen dazu, morgen, ich bin ja "Neu-User", muss da erst mal drüber schlafen. ;-)
viele Gruesse und gute Nacht
Thomas N
Hallo Stefan,
Und ob ich in diesem Forum überhaupt noch weiter posten soll.
Tss tss, man glaubt dir keine Rueckzuege mehr! Welcome to Hotel California *g*
Vielleicht reicht es auch, wenn ich mal wieder ein Jahr Pause mache.
Viele Grüße
Michael
Lieber Michael,
ich muss zugeben, was ich als Humor bezeichnet habe, find ich im nachhinein auch nicht mehr alles so lustig.
Aber,
- Was hältst Du von CSS-Klassen statt hart codierten
Farben?- Was hältst Du von einer Schleife statt 13 sperrigen
Funktionsaufrufen?
Erst bitte im Thread lesen um was es geht
Du hast eine eigene Lösung gebaut, obwohl Dir eine bessere angeboten
wurde.
Ich hatte meine schon längst fertig, als mir die bessere angeboten wurde.
Das ist für sich genommen okay, aber Deine Lösung ließe sich
verbessern.
Daran besteht überhaupt kein Zweifel mit dem "verbessern", aber hier kommt es, so finde ich auf das WIE an.
Da Du an eigenen Experimenten interessiert zu sein scheinst, wollte
ich Dir weitere Schritte dazu vorschlagen.
Ich konnte Deine "Vorschläge" nicht als solche erkennen, sorry.
Ich habe Dich gefragt, was Du davon hältst.
Nicht mehr und nicht weniger.
Das WIE habe ich wohl ungünstig interpretiert, entschuldigung!
Wäre es Dir lieber gewesen, wenn ich geschrieben hätte:
"Du Arsch, Deine Selbstbaulösung ist totaler Müll - zeilenweise
überflüssiger duplizierter Code, der sich von einem richtigen
Programmierer mit einer dreizeiligen Schleife realisieren ließe"?
Ich habe das einwenig so interpretiert, jedenfalls hast Du von sperrigen Funktionsaufrufen bei mir gesprochen und darum ging es mir gar nicht, da habe ich mich sehr missverstanden gefühlt. Es ging da um eine "eigene Lösung". Die Betonung bzw. Entschuldigung, die man bei manchen Leuten dauernd braucht, das man Anfänger ist finde ich manchmal sehr kleinlich. Ich bin ja kein Menschenanfänger, sondern Programmieranfänger. Und ich freue mich über kleine Schritte und ob die Farben nun hart codiert waren oder nicht war doch total egal, ich habe eine "wunderschöne" Tabelle mit zweifarbigen Zeilen über ein Formular mit CGI dynamisch erzeugt. Ist doch toll!? Du hättest vielleicht einmal bravo rufen sollen, nur so als Vorschlag, ich hätte Dich jedenfalls dann ganz anders vertsanden. Aber mach Dir aus dieser Sache nicht zu viel!
Die Energie des Verstehens entdecken wir sie weiter...
Du hast es im Grunde Deines Herzens sicher
nur gut gemeint!
Ich wollte, ich könnte das von Dir auch annehmen.
Ich bitte Dich drum! :-)
Mit vielen Grüßen
Thomas N
Hallo Matti,
ich hab versucht die if-Schleife nachzuvollziehen, habe dafür mit einer Bedingung ($rc == 1) experimentiert und
die Variable ($rc) auch mal NICHT "initialisiert", es kommt aber "immer" ($rc=1 = hellgrau) in der HTML-Ausgabe
zuerst dran, also die else-Anweisung, wenn ich das richtig verstanden habe.
Ich habe das Script, damit ich mich besser zurechtfinde "umgestellt".
Dann kam die Idee noch die Variable ($rc) mitauszugeben, so dass in jeder Zeile noch eine 1 oder eine 0 steht,
jeweils eben passend zur Farbe. Beim ausprobieren hatte ich auch mal den Eindruck die Reihenfolge der TabelleFarben
ändern zu können, aber bin mir nicht sicher, da ich es nicht "reproduzieren" konnte.
Nach dem die Schleife nicht "normal/trivial" ist erlaube ich mir ein paar Fragen:
1. In Deiner Version gibt es ja eigentlich gar keine Bedingung/log. Operator, nur if ($rc), richtig?
2. In den {Anweisungen} wird der Variablen ($rc) jeweils ein Wert zugewiesen (0/1), aber nur für die jeweilige
Anweisung, richtig?
3. Könnte das nicht auch mit einem Inkrementationsoperator gehen?, (hab das noch nicht gemacht inkrementieren).
Aber dann müsste ich die Anzahl der Feld/Value-Werte wissen, oder?
4. warum geht es mit if($rc == 1) auch, dann sind die Variablen-Werte für ($rc) doch nicht nur in den Anweisunegn
gültig?
--------------------------------
#!/usr/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);
my @Feldnamen = $cgi->param();
print $cgi->header(),
$cgi->start_html('CGI-Feedback');
print "<table BORDER=1 cellspacing=0 cellpadding=5>\n";
my $rc = 0;
my ($color, $Feld, $Value);
#my $Value;
#my $Feld;
foreach $Feld (@Feldnamen)
{
# Für diese Zeile passende Farbe aussuchen
if ($rc == 1)
{
$color = '#CFCFCF'; # 0 = hellgrau
$rc = 0;
}
else
{
$color = '#EFEFEF'; # 1 = dunkelgrau
$rc = 1;
}
$Value = $cgi->param($Feld);
print <<EOF;
<tr>
<th bgcolor="$color">$Feld</th>
<td bgcolor="$color">$Value</th>
<th bgcolor="$color">$rc</th>
</tr>
EOF
}
print "</table>\n";
--------------------------------
Viele Grüsse
Thomas N *Neu-User*
:-)
use Mosche;
ich hab versucht die if-Schleife nachzuvollziehen, habe dafür mit einer Bedingung ($rc == 1) experimentiert und
die Variable ($rc) auch mal NICHT "initialisiert", es kommt aber "immer" ($rc=1 = hellgrau) in der HTML-Ausgabe
zuerst dran, also die else-Anweisung, wenn ich das richtig verstanden habe.
Am Anfang ist $rc == 0, deswegen kommt bei der Überprüfung
if ($rc) # s.u. dazu
falsch raus, deswegen else. Da das zutrifft, wird $rc = 1 gesetzt und die Farbe ausgewählt.
Beim nächsten Mal ist $rc == 1, der erste Teil der _Abfrage_ (keine Schleife) wird ausgeführt, $rc = 0 gesetzt ...
Dann kam die Idee noch die Variable ($rc) mitauszugeben, so dass in jeder Zeile noch eine 1 oder eine 0 steht,
jeweils eben passend zur Farbe. Beim ausprobieren hatte ich auch mal den Eindruck die Reihenfolge der TabelleFarben
ändern zu können, aber bin mir nicht sicher, da ich es nicht "reproduzieren" konnte.
Du kannst den Startwert auf 1 setzen, dann ist die Ausgabe andersherum.
- In Deiner Version gibt es ja eigentlich gar keine Bedingung/log. Operator, nur if ($rc), richtig?
Ja. Im logischen Kontext wird $rc folgend ausgewertet:
- Wenn $rc zu 1 ausgewertet wird (zB durch 1, 2, 'blah',
aber Vorsicht: auch '000', ist die Bedingung wahr
- Wenn $rc z 0 ausgewertet wird (zB durch undef, 0, '')
ist die Bedingung falsch.
- In den {Anweisungen} wird der Variablen ($rc) jeweils ein Wert zugewiesen (0/1), aber nur für die jeweilige
Anweisung, richtig?
Nee, für $rc insgesamt. Es soll ja auch im nächsten Schleifendurchlauf sichtbar sein, welchen Wert $rc hat.
- Könnte das nicht auch mit einem Inkrementationsoperator gehen?, (hab das noch nicht gemacht inkrementieren).
Ja, denn es geht ja nur darum, $rc einen Wahr/Falsch Kontext zu verpassen. Normalerweise hätte ich das auch gemacht, hatte mich aber dagegen entschieden, um dich nicht noch mehr zu verwirren.
Statt $rc = 0 geht auch $rc-- und statt $rc = 1 geht auch $rc++.
Zum Lösungsansatz von Michael:
du kannst auch immer $rc++ schreiben und in der if-Abfrage
if($rc % 2) # ist $rc durch 2 teilbar
das war mit modulo-Operator gemeint.
Aber dann müsste ich die Anzahl der Feld/Value-Werte wissen, oder?
- warum geht es mit if($rc == 1) auch, dann sind die Variablen-Werte für ($rc) doch nicht nur in den Anweisunegn
gültig?
$rc == 1 ist eine boolesche Abfrage, keine Zuweisung (wie $rc = 1), oder habe ich deine Frage falsch verstanden?
use Tschoe qw(Matti);
Hallo Matti,
noch mal kurrz und knapp meine Frage.
Wie eine einfache if-Schleife funktioniert ist mir eigentlich
ziemlich klar und, dass wir hier eine "neue" Wertzuweisung in den Anweisungen haben, ist jetzt auch
kappiert. Ist es richtig, dass genau so gut diese Schleife funktioniert?
if ($rc == 1)
{
$color = '#CFCFCF'; # 0 = dunkelgrau
$rc = 0;
}
else
{
$color = '#EFEFEF'; # 1 = hellgrau
$rc = 1;
}
-----------------
Nun zu Deiner Schleife, hier verstehe ich immer noch nicht, was in der "Abfrage" passiert!
if ($rc) # hier wird doch gar kein Wert von $rc abgefragt,
{ # oder doch? Wenn ja, wie?
$color = '#CFCFCF';
$rc = 0;
}
Also das _if ($rc)_ ist mein Problem. Was passiert da?
Könntest Du das nochmal erklären?
Viele Grüsse
Thomas N = Neu-User
:-)
Hi Thomas,
Ist es richtig, dass genau so gut diese Schleife funktioniert?
"if" ist keine Schleife - nur eine Verzweigung.
Also das _if ($rc)_ ist mein Problem. Was passiert da?
In Perl ist jeder skalare Wert "true", der nicht 0 oder die leere
Zeichenkette ist.
(Hm, wie das mit undef ist, weiß ich gerade nicht auswendig.)
Wenn Du also weißt, daß in $rc eine Zahl steht, dann ist
if ($rc)
gleichbedeutend mit
if ($rc != 0)
Die Änderung von $rc läßt sich übrigens aus der Abfrage herausziehen
und die Zuweisung der Farbe etwas abkürzen:
$color = ($rc ? '#CFCFCF' : '#EFEFEF');
$rc = 1 - $rc;
So kommt man dann völlig ohne explizites "if" aus.
Viele Grüße
Michael
Hi Michael,
"if" ist keine Schleife - nur eine Verzweigung.
Ja, und im Buch "21 Tage Perl" (das liegt gerade am nächsten zu mir) steht noch, dass "if" eine
Bedingung ist, einverstanden?
Also das _if ($rc)_ ist mein Problem. Was passiert da?
In Perl ist jeder skalare Wert "true", der nicht 0 oder die leere
Zeichenkette ist.
(Hm, wie das mit undef ist, weiß ich gerade nicht auswendig.)
Also von 1 bis unendlich und a bis Z usw. (also strings z.B., jkhkhkh) ist alles true.
Na gut, ich komm auf Dich zurück! ;-)
Wenn Du also weißt, daß in $rc eine Zahl steht, dann ist
if ($rc)
gleichbedeutend mit
if ($rc != 0)
Also, zum mitdenken, "!=" bedeutet unterschiedlich/ungleich, dass heisst, ich kann die if-Verzweigung
auch so schreiben, richtig? Ja:
my $rc = 0;
if ($rc != 0)
{
$color = '#CFCFCF'; # 0 = dunkelgrau
$rc = 0;
}
else
{
$color = '#EFEFEF'; # 1 = hellgrau
$rc = 1;
}
Wie kommt man darauf, dass
if ($rc)
gleichbedeutend mit
if ($rc != 0)
ist? Oder hat man das einfach festgelegt, oder ist das Mathematik? Hätt ich dann wohl verpasst in der Schule!
Die Änderung von $rc läßt sich übrigens aus der Abfrage herausziehen
und die Zuweisung der Farbe etwas abkürzen:
$color = ($rc ? '#CFCFCF' : '#EFEFEF');
$rc = 1 - $rc;
So kommt man dann völlig ohne explizites "if" aus.
Michael, für so etwas brauch ich noch etwas Bedenkzeit...so auf den ersten Blick...
Viele Grüsse
Thomas N == Neu-User
:-)
use Mosche;
Also das _if ($rc)_ ist mein Problem. Was passiert da?
In Perl ist jeder skalare Wert "true", der nicht 0 oder die leere
Zeichenkette ist.
(Hm, wie das mit undef ist, weiß ich gerade nicht auswendig.)
Also von 1 bis unendlich und a bis Z usw. (also strings z.B., jkhkhkh) ist alles true.
Na gut, ich komm auf Dich zurück! ;-)
Schau noch mal in mein "Erklärposting", da habe ich es erklärt:
Im logischen Kontext wird $rc folgend ausgewertet:
- Wenn $rc zu 1 ausgewertet wird (zB durch 1, 2, 'blah',
aber Vorsicht: auch '000', da es ein String ist)
ist die Bedingung wahr
- Wenn $rc zu 0 ausgewertet wird (zB durch undef, 0, '')
ist die Bedingung falsch.
$rc wird in dem if($rc) Kontext umgewandelt in entweder 1 oder 0 (wahr/falsch). falsch kommt immer dann, wenn $rc undef (der undefinierte Wert), 0 oder '' ist, ansonsten ist es wahr. Siehe dazu zB das Kapitel 4 in "Einführung in Perl" (O'Reilly).
Wenn Du also weißt, daß in $rc eine Zahl steht, dann ist
if ($rc)
gleichbedeutend mit
if ($rc != 0)
Wie kommt man darauf, dass
if ($rc)
gleichbedeutend mit
if ($rc != 0)
ist? Oder hat man das einfach festgelegt, oder ist das Mathematik? Hätt ich dann wohl verpasst in der Schule!
Das wird auf obige Definition von wahr/falsch zurückgeführt und ist, wie gesagt, nur richtig, wenn du weisst, dass in $rc nur Zahlen sind.
Die Änderung von $rc läßt sich übrigens aus der Abfrage herausziehen
und die Zuweisung der Farbe etwas abkürzen:
$color = ($rc ? '#CFCFCF' : '#EFEFEF');
$rc = 1 - $rc;
So kommt man dann völlig ohne explizites "if" aus.
Michael, für so etwas brauch ich noch etwas Bedenkzeit...so auf den ersten Blick...
Egentlich ganz einfach:
$color wird gesetzt auf:
wenn $rc == 1 ist, auf '#CF-....'
ansonsten auf '#EF....'
Wenn $rc in der nächsten Zeile den Wert 0 hat, wird es 1 (da 1-0==1)
wenn $rc in der nächsten Zeile den Wert 1 hat, wird es 0 (da 1-1==0)
use Tschoe qw(Matti);
Servus.
use didaktik;
Also das _if ($rc)_ ist mein Problem. Was passiert da?
Schau noch mal in mein "Erklärposting", da habe ich es erklärt:
Es war nicht das Problem, dass ich nicht das "Erklärposting" angesehen hätte, sondern, es für mich keine Erklärung war.
Im logischen Kontext wird $rc folgend ausgewertet:
Welcher "logische Kontext"?
- Wenn $rc zu 1 ausgewertet wird (zB durch 1, 2, 'blah',
aber Vorsicht: auch '000', da es ein String ist)
ist die Bedingung wahr- Wenn $rc zu 0 ausgewertet wird (zB durch undef, 0, '')
ist die Bedingung falsch.
Ich habs inzwischen kapiert und mach mal eine einfache Formulierung des Problems, aufgepasst:)
Wenn die Variable $rc durch if ausgewertet wird (und das wird sie, auch wenn nur if ($rc) dasteht, also kein "sichtbarer" Operator), dann ist die "unsichtbare" Bedingungsabfrage, ob der Wert der Variable $rc true oder false ist. Was true und false ist, ist eine andere Frage. In unserem Bsp. hatte die Variable $rc entweder den Wert 1 oder 0, dass heisst hatt sie 1 (true), so wurde die if-Bedingung ausgeführt, hatte sie 0 (false), wurde die else (zum spazieren, bisschen Humor muss ja sein) ausgeführt.
Ganz einfach, oder?
$rc wird in dem if($rc) Kontext umgewandelt in entweder 1 oder 0 (wahr/falsch). falsch kommt immer dann, wenn $rc undef (der undefinierte Wert), 0 oder '' ist, ansonsten ist es wahr.
Durch diesen Zusatz zu Deinem "Erklärposting" bin ich so langsam dahinter gekommen, bin ich doch, oder?
Siehe dazu zB das Kapitel 4 in "Einführung in Perl" (O'Reilly).
Das war wohl Intuition, hab heute das Buch gekauft, wollt ich aber gar nicht, war wegen einem andern Buch im Laden. Welche Seite ist es denn, so im überfliegen bin ich noch nicht dazu gekommen.
$color = ($rc ? '#CFCFCF' : '#EFEFEF');
$rc = 1 - $rc;
Egentlich ganz einfach:
$color wird gesetzt auf:
wenn $rc == 1 ist, auf '#CF-....'
ansonsten auf '#EF....'
Wenn $rc in der nächsten Zeile den Wert 0 hat, wird es 1 (da 1-0==1)
wenn $rc in der nächsten Zeile den Wert 1 hat, wird es 0 (da 1-1==0)
?
$rc = 1 - $rc;
$rc = 1 - 0; # 1-0 soll 1 sein? Nach welcher Logik gehst Du hier vor?
Thomas N == Neu-User;)
Der Thread wandert bald ins Archiev, oder?
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.
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.
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:
Wenn Du einen String als Bedingung auswertest, 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.
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.
$rc = 1 - 0; # 1-0 soll 1 sein? Nach welcher Logik gehst Du hier vor?
Welchen Wert würdest Du denn vorschlagen?
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 ...
Viele Grüße
Michael
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
:-)
Hi Thomas,
Nur, lieber Michael mein Problem war ja, das eben
keine Bedingung da war, sondern nur if ($rc)
dastand,
ich wiederhole: Eine Bedingung ist ein Ausdruck.
Der kann auch nur alleine aus einer Variablen oder
Konstanten bestehen (z. B. "if (1)") - wichtig ist
nur, welchen Wert dieser Ausdruck liefert.
Der Ausdruck _kann_ Vergleichsoperatoren enthalten,
muß aber nicht.
Auch (2+2) kann eine Bedingung sein (welche nun in der
Tat einen Operator enthält ...), denn 4 ist im Kontext
einer logischen Auswertung in Perl "true".
drum heisst das Subjekt dieses Threads ja auch
(mit "unbedingtem" if)!
Es gibt aber kein "unbedingtes" "if" in Perl, weil das,
was direkt dahinter steht, eben die Bedingung ist -
auch wenn diese "ungewöhnlich" aussehen kann.
Der Zweck des "if" ist eben gerade die Verzweigung in
Abhängigkeit vom Wert der Bedingung.
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)?
Beides wären legale Bedingungen. An dieser Stelle darf
alles stehen, was einen (skalaren) Wert liefert.
(Beispielsweise dürfte sogar eine nichtskalare Varia-
ble, etwa ein Array, dort stehen, weil er im _skalaren_
Kontext einen skalaren Wert liefert, nämlich die Anzahl
der in ihm enthaltenen Elemente ...)
ich les grad das Posting vor dem Absenden nochmals
durch, ($rc) ist ja selbst die Bedingung, oder?
Genauuuuu ...
Stop mal, ist der Kontext die Klammer, einmal die
Bedingung!?
Für das "if" ist die Klammer _samt_ deren Inhalt die
Bedingung; für den Inhalt der Klammer ist die Klammer
deren Kontext.
Meinst Du, dass so?: Im Kontext der Klammer, lautet
die Bedingung, den Wert auf "wahr" oder "falsch"
abzubilden."
Der Kontext der Klammer nach dem "if" bewirkt, daß
der Wert des Inhalts der Klammer als Bedingung inter-
pretiert, d. h. auf "wahr" oder "falsch" abgebildet
werden muß. In anderen Kontexten als Bedingungen gibt
es wiederum andere Auswertungsvorschriften.
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 stolz antwortet:
"Ich bin wahr!"
Yep.
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. ;-)
Es gibt andere Programmiersprachen, bei denen der Aus-
druck hinter dem "if" nicht geklammert werden muß
(PASCAL beispielsweise). Dort würde ich dann sagen,
der Kontext des Ausdrucks wird alleine durch seine
Stellung direkt nach dem "if" gebildet.
Im Fall von Perl wird der Kontext durch die
_Kombination_ aus den Klammern _und_ dieser Stellung
nach dem "if" gebildet - den an anderen Positionen
bedeutet die runde Klammer wiederum andere Dinge
(beispielsweise einen Listen-Kontext).
Sind doch Problemen, die ich gar nicht hatte. :-)
Das kommt alles noch.
Die runde Klammer in Perl ist ein "überladener Ope-
rator", der in verschiedenen Situationen unterschied-
liche Bedeutungen hat.
So, wie in anderen Sprachen das "+"-Zeichen ein über-
ladener Operator ist, der beispielsweise Zahlen ad-
diert, aber Strings zusammenfügt ...
Wenn Du einen String als Bedingung auswertest,
Redest Du jetzt davon ($rc)? Eine Bedingung ist für
mich ein Operator.
Oben habe ich versucht, Dir zu erklären, daß der Ein-satz von Operatoren eben nur ein Spezialfall einer
Bedingung ist. Da eine Bedingung ein Ausdruck ist und
ein Ausdruck zwar Operatoren enthalten kann, aber nicht
muß, gibt es auch Bedingungen ohne Operatoren.
Warum sagt das keiner? Sind Klammern "()" nun
schon Operatoren? Aber doch nur Präzedenz-
Operatoren, oder?
In bestimmten Fällen sind die runden Klammern tat-
sächlich auch Operatoren - beispielsweise bilden sie
im Fall von "(1, 2)" die beiden Skalare "1" und "2"
so ab, daß als Ergebnis eine Liste mit zwei Elementen
entsteht.
Also jetzt bin ich etwas durcheinander, Operatoren
waren für mich vorrangig die VergleichsOperatoren
Lies "perdoc perlop" - es gibt in Perl sehr viele und
vor allem auch sehr ungewöhnliche Operatoren.
Beispielsweise liest man in allen mir sonst bekannten
Sprachen aus einer Datei, in dem man eine Funktion
dazu aufruft ... nicht aber in Perl, wo es dafür einen
eigenen Operator gibt.
Es gibt sogar Operatoren, die selbst fast wie Kontroll-
strukturen funktionieren. Einen davon habe ich Dir
vorgeführt: Die bedingte Zuweisung
$variable = ($bedingung ? $wert1 : $wert2),
was eine alternative (Kurz-)Schreibweise für
if ($bedingung)
{$variable=$wert1}
else {$variable=$wert2}
ist.
und eine ordentliche if, ja wie nenn ich das Ding
jetzt? If-Kontrollstruktur!
Sehr gut. "Anweisung" würde auch passen, aber "Kon-
trollstruktur" bezeichnet genauer, daß das "if" die
Kontrolle über den Programmfluß ausübt, also dafür
sorgt, daß bestimmte _andere_ Anweisungen ausgeführt
werden oder auch nicht.
So eine Art? Michael, les mal "Einführung in Perl"
(O'Reilly) S. 35. :-)
Besitze ich nicht ...
Viele Grüße
Michael
Michael!
Du solltest Perl-Kurse geben, jetzt sagst Du vielleicht, dass Du dies schon tust, wie auch immer, der Thread/Ast kann nun glaube ich beruhigt ins Archiev wandern...
Vielen Dank!
Viele Grüße
Thomas N == Neu-User
(der jetzt das alles mal noch ökonomisch "in" seinen Geist einstrukturieren muss ;-)
use Mosche;
use didaktik;
Immer diese Kopierer :-)
Siehe dazu zB das Kapitel 4 in "Einführung in Perl" (O'Reilly).
Das war wohl Intuition, hab heute das Buch gekauft, wollt ich aber gar nicht, war wegen einem andern Buch im Laden. Welche Seite ist es denn, so im überfliegen bin ich noch nicht dazu gekommen.
Seite 62.
$rc = 1 - 0; # 1-0 soll 1 sein? Nach welcher Logik gehst Du hier vor?
Höhere Mathematik, kann man näherungsweise berechnen, wenn man die Quadratur des Kreises _vollständig_ gelöst hat. Daraus ergibt sich das Nebenergebnis:
lim(x->oo)(1-0) ~ 0.
use Tschoe qw(Matti);
Nah;
$rc wird in dem if($rc) Kontext umgewandelt in entweder 1 oder 0 (wahr/falsch). falsch kommt immer dann, wenn $rc undef (der undefinierte Wert), 0 oder '' ist, ansonsten ist es wahr.
Siehe dazu zB das Kapitel 4 in "Einführung in Perl" (O'Reilly).
Seite 62.
Welche Ausgabe hast Du denn? Sicher Nicht Auflage 3 von 2002, oder? *g*
Da S.62, stehen bei mir Übungsaufgaben u. auf S. 61 gehts um <STDIN> im Listenkontext. Wie soll denn das Kapitel heissen? Bei mir Kap.4 == Subroutinen, bei Dir?
$rc = 1 - 0; # 1-0 soll 1 sein? Nach welcher Logik gehst Du hier vor?
Höhere Mathematik, kann man näherungsweise berechnen, wenn man die Quadratur des Kreises _vollständig_ gelöst hat. Daraus ergibt sich das Nebenergebnis:
lim(x->oo)(1-0) ~ 0.
use high(Mathematik);
Thomas N == Neu-User
:-)
use Mosche;
Siehe dazu zB das Kapitel 4 in "Einführung in Perl" (O'Reilly).
Seite 62.
Welche Ausgabe hast Du denn? Sicher Nicht Auflage 3 von 2002, oder? *g*
2. Auflage anno 1998.
Da S.62, stehen bei mir Übungsaufgaben u. auf S. 61 gehts um <STDIN> im Listenkontext. Wie soll denn das Kapitel heissen? Bei mir Kap.4 == Subroutinen, bei Dir?
Kap. 4 ist bei mir Kontrollstrukturen, und davon gleich die zweite Seite, da steht das 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. Ich erläutere mal den Unterschied zu anderen Programmiersprachen:
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.
Perl kennt nur einen Variablentyp, den Skalar.
Wenn du in der anderen Programmiersprache einen Text mit einer Zahl "verknüpfen" willst (zB bei der Ausgabe) musst du eine Variable umwandeln. Bei Delphi gibt es häufig Ausdrücke wie:
label.caption := IntToStr(zahlvariable);
die Idee ist klar: caption erwartet einen Text, deswegen muss die Zahl durch die Funktion IntToStr in einen Text umgewandelt werden.
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).
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.
use Tschoe qw(Matti);
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