Re: Perl-Prob - Hash-Übergabe an Sub? - () statt {} - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 26.April.2001, 10:27.
    Re: Perl-Prob - Hash-Übergabe an Sub? - () statt {}

      Hi Ruben... Du hast die Hashes falsch initialisiert, richtig muss es so aussehen:

      %bg=("h", "$cbgh", "m", "$cbgm", "d", "steelblue", "a", "$cbga", "z", "$cbgz");
      %th=("erster", "Nummer 1", "zweiter", "Nummer 2");

      Also einfache () statt den geschweiften {}... Ein bisschen klarer ist es übrigens, eine Hash-Initialisierung so zu schreiben:

      %bg=( "h" => "$cbgh", "m" => "$cbgm", "d" => "steelblue", "a" => "$cbga", "z" => "$cbgz");


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Ruben (403 Beiträge) am Mittwoch, 25.April.2001, 18:48.
    Perl-Prob - Hash-Übergabe an Sub?

      Hallo,
      habe ein Prob mit der Auswahl eines Wertes aus einem Hash in eine Sub, kommt ne ganz komische Fehlermeldung bzw. Inhalt des Wertes.
      Hier mal der Code:

      <perl>
      get "","colors";
      $cbgw="#FFFFFF"; 
      $pix="http://www.irgendwas.de/vk_pic/cpix1.gif";
      

      %bg={"h","$cbgh","m","$cbgm","d","$cbgd","a","$cbga","z","$cbgz"};
      %fc={"h",$cfh,"m",$cfm,"d",$cfd,"a",$cfa,"z",$cfz};

      sub tz{
      @params=@_;
      $bgf={$params[1]};
      out $bgf;
      out "<tr><td colspan=$params[2] height=$params[0] bgcolor=$bgf</td></tr>";
      }
      </perl>
      Dieser Code wird in ein Template "includet", und dann entsprechend die Sub mit den Übergabeparametern aufgerufen. Der Aufruf erfolgt so:
      &tz(30,d,2) wobei 30 und 2 richtig ausgewertet und in die Ausgabe eingesetzt wird, nur halt für d wird nicht der Wert aus dem Hash geholt, sondern es steht dann im Quellcode der generierten Seite:
      wo die Ausgabe erfolgen soll (schon an der richtigen Stelle!) HASH(0x88bc604)<tr><td colspan=2 height=30 bgcolor=HASH(0x88bc604)</td></tr> 
      
      Als Wert sollte dort ein Klartextwert html-Farbbezeichnung stehen (aus der Datenbank "colors")
      Nu weiß ich nich mehr weiter, kann mir jemand helfen?
      CU
      Ruben

     Antworten

    Beitrag von fb (406 Beiträge) am Mittwoch, 25.April.2001, 23:31.
    Re: Perl-Prob - Hash-Übergabe an Sub?

      Hallo Ruben,

      blick nicht ganz durch aber könnte es so gehen ?

      Feld in Datenbank background

      Inhalt= key,wert,key,wert usw

      dann den inhalt in einen hash einlesen

      %bg=split(/,/,$background);

      und bei der ausgabe bequem zugreifen :

      <td colspan=$bg{key} .....
      

      mal mit realen werten:

      im feld background steht c,2,h,40,w,120

      get "irgentwas";
      %bg=split(/,/,$background);
      

      out "<tr><td colspan=$bg{'c'} height=$bg{'h'} width=$bg{'h'}>Schöner tag heute</td></tr>";

      weis nicht obs funzt oder hilft aber vielleicht ja doch :-)
      FB

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 26.April.2001, 00:01.
    Re: Perl-Prob - Hash-Übergabe an Sub?

      Hi Ruben...

      Die folgende Zeile macht die Probleme:

      $bgf={$params[1]};
      

      Du gibst dort ja keinen existierenden Hash an, nach dem wie ich das Programm verstanden habe, sollte die Zeile so lauten:

      $bgf=$bg{$params[1]};
      

      Dann klappts mit dem Hash... (Wozu ist dann eigentlich der Hash %fc da? Kommt das noch? ;-) )

      (Nur so, falls es Dich interessiert: $x={...}; übergibt an $x eben eine sog. REFERENZ eines Hashes (in diesem Fall "anonym" -weil er keinen Namen hat-), d.h. einen Zeiger, das ist ein bisschen wie eine "doppelte" Variable - also nicht in $x steht dann der Wert, sondern es steht ein Zeiger auf den gewünschten Wert drin - deshalb gibts die komischen Ausgaben, das ist der Wert des Zeigers...)

     Antworten

    Beitrag von Ruben (403 Beiträge) am Donnerstag, 26.April.2001, 09:00.
    Re: Perl-Prob - Hash-Übergabe an Sub?

      Mhm, zunächst mal danke.
      Geht aber immer noch nicht, ich muß das erst mal ohne Includes probieren - irgendwo ist da noch ein Schweinchen drin.
      Der Hash %fc ist für Schriftartfarben - kannst ja mal unter http://baseportal.de/cgi-bin/baseportal.pl?htx=/hempelr/bib/colors den erreichten Stand anschaun. Für die Nutzung von Farbschemen ist das ganze gedacht, meine Kombinationen sind sicher nicht der Stein des Weisen, aber halt als Beispiel gedacht.

      Aber noch mal zum Hash, irgendwie hat der keine Werte (jetzt ist, egal bei welchem Element, der Wert immer 1)
      Hab in anderen Templates Hashes eingesetzt, geht wunderbar (allerdings da bisher Werte innerhalb des Scripts generiert, nicht aus DB-Feldinhalten zusammengeschossen - liegt hier vielleicht noch ein Denkfehler?)
      CU
      Ruben

     Antworten

    Beitrag von Ruben (403 Beiträge) am Donnerstag, 26.April.2001, 10:07.
    Re: Perl-Prob - Hash-Übergabe an Sub?

      High,
      hab jetzt mal versucht, das Script im stand-alone-modus hinzukriegen - niente!
      Irgendwie werden hashes nicht belegt - ich kann machen was ich will, keines der Hashs enthält Werte, egal ob vor oder innerhalb der Sub.
      Nun bin ich Rubi Ratlos!

      Hier der Code:
      <perl>
      get "", "colors";
      

      out "<table border=1 width=350><tr><td colspan=2>$cbdg</td></tr><tr><td colspan=2>\$cbgd ist belegt mit: $cbgd (vor Hashdefinition und vor Sub)</td></tr>";

      %bg={"h", "$cbgh", "m", "$cbgm", "d", "steelblue", "a", "$cbga", "z", "$cbgz"};
      %th={"erster", "Nummer 1", "zweiter", "Nummer 2"};
      out "<tr><td colspan=2>Hashelement d im Hash bg (vor Sub): $bg{d}</td></tr>";
      out "<tr><td colspan=2>Hashelement th(erster)(vor Sub):";
      out $th{erster};
      out "</td></tr>";
      

      &tz(30,d,2);

      sub tz{
      @params=@_;
      out "<tr><td colspan=$params[2]>Nur einfacher Text hier(in Sub)</td></tr>";
      out "<tr><td colspan=$params[2]>Wert \$bg{d}: $bg{d}</td></tr>";
      

      out "<tr><td colspan=$params[2]>Haselement \$th{erster} (in Sub): $th{erster}</td></tr>";

      out "<tr><td colspan=$params[2] height=$params[0] bgcolor=$bg{$params[1]}></td></tr>";
      }
      

      out "</table>";
      </perl>
      

      und hier der Aufruf:
      http://baseportal.de/cgi-bin/baseportal.pl?htx=/hempelr/bib/hastest

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 26.April.2001, 10:27.
    Re: Perl-Prob - Hash-Übergabe an Sub? - () statt {}

      Hi Ruben... Du hast die Hashes falsch initialisiert, richtig muss es so aussehen:

      %bg=("h", "$cbgh", "m", "$cbgm", "d", "steelblue", "a", "$cbga", "z", "$cbgz");
      %th=("erster", "Nummer 1", "zweiter", "Nummer 2");

      Also einfache () statt den geschweiften {}... Ein bisschen klarer ist es übrigens, eine Hash-Initialisierung so zu schreiben:

      %bg=( "h" => "$cbgh", "m" => "$cbgm", "d" => "steelblue", "a" => "$cbga", "z" => "$cbgz");

     Antworten

    Beitrag von Ruben (403 Beiträge) am Donnerstag, 26.April.2001, 10:45.
    THX - "kleiner" Fehler - nichts geht - () statt {}

      Danke, Christoph,
      immer wieder das gleiche - nicht richtig gelesen bzw. blind losgehackt.......tststst
      Jetzt ist es klar - wie machen das die richtigen Profis - passiert euch sowas auch noch?

      CU
      Ruben

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 26.April.2001, 14:28.
    Re: THX - "kleiner" Fehler - nichts geht - () statt {}

      Klar, ständig!!!!!! ;-) Manchmal hängt man ne Stunde lang bei der Suche nach einem superdämlichen Fehler, wie z.B. irgendwo ne Variable überschrieben, die man woanders aber noch braucht und so Kram...

      Aber je mehr Fehler man macht, desto besser wird das "Gefühl" worans denn liegen könnte und man bekommt auch einen besseren Blick für "Code-Muster", also man überfliegt den Code und bleibt bei den Sachen hängen, die irgendwie komisch sind... ;-)

     Antworten

    Beitrag von Ruben (403 Beiträge) am Donnerstag, 26.April.2001, 19:20.
    Re: THX - "kleiner" Fehler - nichts geht - () statt {}

      Mhm, stimmt, mit dem Gefühl für den Code.
      Wenn da ne Fehlermeldung kommt, ist unterdessen kein Schreck mehr dan, das erste ist nachschauen - vergessene Simikolons (allzu häufig :-), falsche "" - man findets unterdessen immer meist auf Anhieb.
      Solche Sachen wie mit dem Hash vorhin rühren einfach aus Unkenntnis, zu wenig Praxis und nicht genauem Lesen in den Dokus.
      Aber noch mal ne Frage zum Initialisieren von Hashes:
      ich hab 2 Einführungen in Perl - die eine sagt es so wie du mittels %hash=("erster"=>"Wert 1"}, die andere so, wie ichs gemacht habe %hash("erster","Wert 1")
      Grundsätzlich falsch scheint ja keine zu sein - denk mal "sauberer" Stil ist die Variante von dir, diese Variante mit => ist einmal besser lesbar, bloß halt eben wieder Fehleranfällig fürs Vertippen (aber ist halt so........*gg* muß man eben(wie eigentlich immer) die Zunge quer ins Maul nehmen) und zum anderen möglicherweise auch sicherer in der Zuweisung?
      Und wie macht man das nun mit Variablen in den Wertzuweisungen in "" oder nackt?

      Grundsätzliche Frage nochmal - ist es nun erforderlich bei bp Werte von html-Code in "" zu setzen oder grundsätzlich nicht (halt bloß bei input-typen, wenn eine doppelte = Zuweisung entstehen würde?)

      ok - Wochenende hab ich hoffentlich wieder etwas Zeit, weiter zu basteln.
      CU
      Ruben

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 26.April.2001, 21:51.
    Re: THX - "kleiner" Fehler - nichts geht - () statt {}

      Wie bei allem (Neuem) im Leben... Erst hat man n bisschen Bammel vor, dann lernt mans und irgendwann isses ganz einfach... Zum Glück kann man nie auslernen... ;-)

      Klar, beide Hash_Initialisierungen sind Ok, das ist ja einer der Leitsprüche von Perl: "There is more than one way to do it...". Das mit den => ist der "eigentliche" "richtige" - der zweite, also mit "name", "wert"...etc. rührt daher, dass Listen (das sind die Sachen mit dem @ vorne dran) in Hashes gewandelt werden. Also wenn man eine Liste an einen Hash "verfüttert", nimmt er einfachen das was kommt als Schlüssel/Wert-Paare. Klar? Kann bei beiden kein besser oder falsch erkennen, machs so, wie es Dir am Besten gefällt ;-)

      Tjaaaaaaa, mit den "" ist das garnicht so einfach und zwar deshalb weil Perl so wahnsinnig tolerant ist - es versucht immer da Beste draus zu machen ;-)

      Im Prinzip kannst Du einfache Wörter einfach so hinschreiben - wenn Du nicht gerade einen Perl-Befehl erwischst hast Du damit keine Probleme:

      $meinhash{Farbe}=blau;
      

      geht im Prinzip auch, auch wenn ich das etwas gefährlich finde (wg. dem alleinstehenden "blau"). Ich weiss die Details nicht genau, wann Perl was wie interpretiert (und das weiss wahrscheinlich keiner ausser Larry Wall ;-) ), aber ich mache in Hashes normalerweise KEINE Anführungsstriche und "draussen" schon:

      $meinhash{Farbe}="blau";
      

      sieht meiner Meinung nach vernünftiger aus... Zahlen brauchen natürlich sowieso keine, aber das sollte klar sein...

      Deine letzte Frage hab ich nicht verstanden...?!

      Grüsse,

      Christoph...

     Antworten

    Beitrag von Ruben (403 Beiträge) am Freitag, 27.April.2001, 20:49.
    Meinte html-code in Templates

      Danke erst mal für die umfangreiche Antwort, hab dadurch noch nen Denkanstoß zu Hashes und Listen gekriegt (das mit dem Einfügen von Listen in Hash und dann daducrch einfach "Wertpaarbildung" - glaub das kann man gut gebrauchen) - ich sollte mir wohl doch mal ein Perl-Buch kaufen und mit mehr als Einführungen arbeiten - nur Trial and Error (und "blöde" Fragen im Forum) is wohl nicht die ausreichende Methode. *fg*

      Aber noch mal zur Frage:
      Unterdessen mach ich fast alles mit Ulli Meybohms Phase 5, ist für html und auch für Perl hervorragend mit Syntaxhighlighting ausgerüstet. Nun macht aber der HTML-Ed. generell alle Werte an Tags (also bspw. bgcolor="red") immer in "", das führt bei "out-Zeilen" natürlich zu Fehlermeldungen (oder sollte ich mir angewöhnen, nur die einfachen ' ' zu nehmen und es geht dann?)
      Ich mach da dann meistens ein globales Suchen/Ersetzen aller " durch nichts und arbeite die einzelnen out-Zeilen händisch nach (sind ja meistens weniger als der gesamte html-Code der Seite), mitunter siegt aber auch die Faulheit (oder der Zeitdruck) und es entsteht ein recht "unsauberer" html-Code mit Werten in "" und ohne. Interpretiert wird es nach meiner Erfahrung sowohl von Netsc. als auch IE (wenigstens die 4er bzw. 5er Vers.)korrekt - nur sieht es halt unprofessionell aus - und den Quelltext interessanter Seiten wird eh von "Webseitenbastlern" oft angeschaut.
      Deshalb die Frage - geht generell ohne "" bei bp-Templates oder sollte es schon nach html-Standard gemacht werden? In der Doku ist es oft nur nackt niedergeschrieben - irgendwo hab ich auch mal am Anfang gelesen, daß das bei bp nicht notwendig sei. Du bist doch auch so nebenbei noch HTML-Profi (hab letztens mal deine Seite Milch&Zucker unter http://www.dhtml.seite.net gefunden) Hast aber da ganz schön was an Wissen zusammengetragen und gebündelt dargestellt - stark (dort im Quelltext is auch n bissel mal mit und mal ohne "" :-).
      Also die Frage war einfach so bissel Selbstunsicherheit, daß man sich zum "Obst" machen könnte, wenn jemand so gemixten Quelltext anschaut (eigentlich ne Lapaille, aber was einen halt so bewegt... :-)
      Herzliche Grüße

      Ruben

      PS: Eigentlich wieder mal was von Andreas Jurenda gehört - ging mir grad eben mal so im Kopf rum?

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 27.April.2001, 23:15.
    Re: Meinte html-code in Templates

      Ahh, ok, dann war meine Antwort natürlich thematisch daneben - hoffe, es hat vielleicht trotzdem auch ein bisschen was geholfen ;-)

      So, zu "" in HTML-Code: NS und IE haben beide keine Probleme mit fehlenden "", wie Du ja selber schon schreibst... Die momentane baseportal-Version verträgt KEINE "", bzw. interpretiert die einfach mit, also Feld=="ja" sucht tatsächlich nach "ja" (INKL. der anführungszeichen) und nicht nach: ja

      Zum Obst machst Du Dich wg. fehlender Anführungsstriche bestimmt nicht, im Gegenteil, daran sieht man, dass Du per Hand codest (Drum haben wie bei Milch&Zucker ab und zu bewusst Anführungsstriche weggelassen! ;-) )

      Die neue Version kann mit allem prima umgehen (und noch viel mehr ;-) ) --> s. beta-doku... ach ja, da hat sich übrigens einiges getan, mich würde mal interessieren, ob Deine "wilden" ;-) Skripte inzwischen wieder laufen ;-)

      Perl-Buch: Am Besten über den Link in der FAQ bei Amazon kaufen, dann spendest Du baseportal 15% des Preises ;-)

      Andreas Jurenda: Ein wenig: Er hat mir vor 2 Wochen mal geschrieben, dass er ziemlich schlimme Windpocken bekommen hat, was bei Erwachsenen wohl ziemlich hart sein soll. Müsste aber langsam mal wieder gesund sein, ist auch schon wieder 2 Wochen her (oder wie lange liegt man da darnieder?). Ich hoffe doch, dass er sich mal wieder blicken lässt ;-)

     Antworten

    Beitrag von Ruben (403 Beiträge) am Samstag, 28.April.2001, 00:43.
    Re: Meinte html-code in Templates

      nee,nee, das war schon richtig mit dem Thema - es war ja nur noch eine Frage offen, halt die mit dem html.
      OK, beruhigt mich, daß es "eigentlich" egal ist, ob "" oder nicht. Da ist es dann natürlich einfacher, nur die out-Zeilen zu bearbeiten.

      Uups, Fachbücher sind wirklich nicht grad fürn Äppel und n Ei zu haben, aber brauchen tu ich was, werd das Kochbuch bestellen, hat echt gute Rezensionen.

      Mhm, in die Beta wollte ich schon seit einiger Zeit mal wieder, nach den Prüfungen ist dann wieder mehr Zeit (15.Mai ist "Stichtag", IHK schriftlich), dann werd ich mal dadrin "richtig aufmischen" *ggg*
      CU und schönes Wochenende, hoffentlich diesmal ohne Katastrophen
      Ruben

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Samstag, 28.April.2001, 01:00.
    Re: Meinte html-code in Templates

      Na dann... ;-)

      Freu mich schon auf Deinen Veranstaltungskalender in der Bib ;-)

      Ja, Fachbücher sind teuer, aber letztendlich muss man sich das mal in die Zeit umrechnen die man spart - wobei ich hab schon so manchen dicken Klopper kurz durchgeblättert und innen Schrank gestellt, weils dann doch nich so hilfreich war... Aber z.B. "Learning Perl" oder "Programmieren mit Perl" wäre auch gut und gerne das 10fache wert gewesen ;-)

      Ächz, der letzte Sonntag war grauenhaft... ;-(

     Antworten


     
 Liste der Einträge von 63000 bis 63150:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.06s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!