Beitrag von hempelr (1976 Beiträge) am Freitag, 12.Dezember.2003, 15:24.
@CB - Ganz seltsames Phänomen - Dynamsiche Variablen
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 12.Dezember.2003, 15:59.
Re: @CB - Ganz seltsames Phänomen - erklärbar ;-)
Antworten
Beitrag von hempelr (1976 Beiträge) am Freitag, 12.Dezember.2003, 16:47.
Re: @CB - Ganz seltsames Phänomen - erklärbar ;-)
Erst mal ganz sehr danke für die gute Erklärung zur richtigen Schreibweise.
das "...${radio.$Field}..." funktioniert komischerweise schon so wie ich will, hab natürlich nich überprüft, wie der Varname wirklich ist, aber er macht treu und brav ein Bündel Radiofelder, so wie ich das wollte... - und in Miete funzt das in mehreren Scripten mit der falschen Schreibweise - fängst du in bp da noch was ab?
Und komischerweise im gesamten Script bei Lizenz auch, ich hab so in etwa 120 - 150 solcher dynamischer Variablennamen insgesamt drin, genauso ohne Doppelquotes - nur das td meckert rum (nee es meckert nicht, es lässt das Script an die Wand laufen...)
Also das mit den Konstanten leuchtet mir ein - und die Schreibweise ${"td$Field"} auch.
Bloss das mit der Verkettung macht mir bisserl Kopfzerbrechen, es ergeben sich da ja dann ganz eigenartige Zuweisungen wie bspw. push @l_artannahme, ${"td$Field"}."\n"; - push @l_artannahme, "${'td'.$Field}\n"; nimmt er auch klaglos, wobei mir das dann auch noch halbweg gefällt und logisch erscheint.
Könnte man da nicht die folgende Variante auch als syntaktisch und von der Interpunktion als richtig bezeichnen ????
$x = ${'string'.$varwert};
wobei der Punkt als Verkettungsoperator dienen soll
Danke für kurzes Re dazu
Gruss Ruben
PS
warum ausgerechnet das > td < den Fehler verursacht, ist mir vollkommen unklar. Ein anderes Script baut, je nach Eingabe des Users, bis zu 60 solcher Dynamischen Variablen in der unsauberen Art und Weise und macht das vollkommen richtig - die Varnamen enthalten selbst Informationen, die ausgewertet werden und das geht... mhm - aber begriffen hab ichs schon....
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 12.Dezember.2003, 17:42.
Re: @CB - Ganz seltsames Phänomen - erklärbar ;-)
Äh, also wenn Du's wirklich im Detail wissen willst, dann wünsch ich Dir viel Spass bei der Lektüre der "gory details of parsing quoted constructs": ;-)
http://perldoc.com/perl5.8.0/pod/perlop.html#Gory-details-of-parsing-quoted-constructs
Ich mach mir da normalerweise nich den Kopf drum, sondern schreibs halt hin wie ich weiss dass es funktioniert, auch wenn ich dazu 2 oder 3 Zeichen mehr brauch ;-)
Ansonsten:
$x = ${'string'.$varwert};
is definitiv richtig, hast ja nur ' statt " verwendet, das is bei konstanten Texten dasselbe...
Trifft Perl in ".." auf ${...} scheint es aus den "..." auszubrechen (war mir neu, aber scheint mir logisch), das erklärt warum
"${'td'.$Field}\n";
funktioniert - alles innerhalb der {...} behandelt Perl wie wenn es NICHT innerhalb der "..." wäre.
"bla ${'td'.$Field} blubb";
ist somit dasselbe wie
"bla ".${'td'.$Field}." blubb";
Mmh, wobei es nicht ganz stimmen kann, weil dann müsste
"bla ${&sub()} blubb";
auch funktionieren, was es meines Wissens nicht tut - muss so aussehen:
"bla ${[&sub()]} blubb";
und das hat nun gar keinen Vorteil mehr vor
"bla ".&sub()." blubb";
Naja, Genaueres steht in obigem Link ;-)
push @l_artannahme, ${"td$Field"}."\n";
geht sowieso (Du musst einfach immer die "Bereiche" anschauen,, also da gibts den {...} Bereich und da drin wiederum den "..." Bereiuch) und mit
push @l_artannahme, "${'td'.$Field}\n";
klappts nach der obigen Erklärung auch, wobei ich nich wirklich weiss ob das besser zu lesen ist - genauso lang isses ;-)
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 12.Dezember.2003, 18:17.
Re: @CB - Ganz seltsames Phänomen - erklärbar ;-)
auch funktionieren, was es meines Wissens nicht tut - muss so aussehen:
"bla ${[&sub()]} blubb";
und das hat nun gar keinen Vorteil mehr vor
"bla ".&sub()." blubb";
Doch, hat es und zwar bei here-docs
Sander
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 12.Dezember.2003, 18:31.
Re: @CB - Ganz seltsames Phänomen - erklärbar ;-)
Stimmt allerdings... Aber schön isses trotzdem nich... ;-) Ich fänds prima, wenn &bla() direkt erkannt würde...
PS: Meine Mail nich bekommen?
Antworten
Beitrag von hempelr (1976 Beiträge) am Freitag, 12.Dezember.2003, 18:42.
Re: @CB - Ganz seltsames Phänomen - erklärbar ;-)
geht aber auch so - und das sowohl in here-docs als auch in Stringzuweisungen:
und gefällt mir sehr gut, weil im HTML-Editor gut ins highlightning einbaubar....
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 12.Dezember.2003, 19:05.
Re: @CB - Ganz seltsames Phänomen - erklärbar ;-)
Hurra, 1 Zeichen gespart ;-) War mir neu, aber gefällt mir auch nich wirklich ;-)
Antworten
Beitrag von hempelr (1976 Beiträge) am Samstag, 13.Dezember.2003, 09:51.
Re: @CB - Ganz seltsames Phänomen - erklärbar ;-)
Frechdachs, geht mir nicht um ein Zeichen einsparen, sondern um das "logische" in dem Ausdruck, so kriegste auch Berechnungen und andere Perl-Funktionen direkt in here-docs (bei der Syntax muss alles im scalaren Context stehen); und das ist ja eigentlich ne klasse Sache (übrigens, ist nicht auf meinem Mist gewachsen, ist aus dem Perl-Kochbuch)
Ist doch eifach zu merken: ${ \ beliebiger Ausdruck im scalaren Kontext }
Ausserdem "liebe" ich diese Form, weil sie mein Syntaxschema für Phase5 unterstützt ;-)
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 15.Dezember.2003, 13:09.
Re: @CB - Ganz seltsames Phänomen - erklärbar ;-)
Antworten
Beitrag von hempelr (1976 Beiträge) am Montag, 15.Dezember.2003, 13:45.
Re: @CB - Ganz seltsames Phänomen - erklärbar ;-)
mhm - also mit dem "selbst erkennen" von Perl wäre nicht schlecht...
Und mit den Berechnungen vor dem here-doc ist ja schon klar, aber manchmal hat man soviel zui "berechnen", dass man vor lauter temporärer Variablennamen nicht mehr durchblickt (weisst doch, mancher ist liederlich und schreibt sich nicht alle varnamen auf - und dann geht ne wilde sucherei im Quelltext los.... ;-)
Und ganz toll ist, dass mit der gezeigten Syntax auch bedingte Ausgaben machen kann, bspw. wenn in nem Datenbankfeld nix steht nix und sonst halt irgendwelchen Text: (hatte ich mal vor nem reichlichen Jahr gefragt, hat keiner nen Tipp gehabt, hier ist er jetzt - und nur durch die Dskussion in diesem Thread drauf gekommen durch die Hinweise zur richtigen Interpunktion
----schnipp
$url = "http//www.domain.de";
$var = "Variable1 belegt";
$var2 = "ohne Anzeige";
out<<EOF;
Die Werte sind<br>
${ \("<b>".(substr $url, (index $url, ":") +3)."</b><br>") if (index $url,":") >-1; }
Grad bemerkt, dass da auch bedingte Ausgaben gehen müssten<br>
String 1 ${ \"da ist die var: $var" if $var ne "" } und String 2 ${ \($var2 ne "ohne Anzeige" ? "da ist was drin $var2" : "Var2 wird nicht angezeigt, weil auf Wert abgefragt")}
EOF
----schnapp
Antworten
Beitrag von hempelr (1976 Beiträge) am Montag, 15.Dezember.2003, 14:28.
Re: @CB - Ganz seltsames Phänomen - erklärbar ;-)
sorry - war vorhin noch nich ganz fertig.... enter irrtümlich erwischt....
Das ganze ist zwar durch die Interpolation etwas langsamer, hab einen Test mit einer Million Schleifendurchläufen gemacht für obigen Code und den gleichen Code mit Var-Belegung vor dem here-doc, folgede Ergebnisse:
1) "Berechnungen" im here-doc: 8.05 Sekunden
2) "Berechnungen" und "Zwischenvariablen" vor dem here-doc: 6,48 Sekunden
Also ist schon sichtbar, dass der "interpollationskonstrukt" ${ \skalarer Perl-Ausdruck} etwas langsamer als die direkte Zuweisung an Zwischenwars ist....
Antworten
Beitrag von hempelr (1976 Beiträge) am Freitag, 12.Dezember.2003, 18:31.
Re: @CB - Ganz seltsames Phänomen - erklärbar ;-)
Antworten