Re: @"Perler" - nochmal Problem - 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 Sander (8133 Beiträge) am Montag, 15.Oktober.2001, 18:05.
    Re: @"Perler" - nochmal Problem

      >> 
      sub test
      {
      my $test = "das ist ein Test";
      return ($test)
      }
      
      wird aber test auch nicht zurückgegeben (?)
      >>

      Wenn du diese sub mit
      $testa=&test; aufrufst, hast du den zurückgegebenen Wert in $test drin.
      
      oder mit
      out &test;
      wird der Inhalt von $test am zeitpunkt des returns ausgegeben.
      Das hat den Vorteil, das du auch 2 Austiegsbedingungen basteln kannst:

      if (&test("Berlin")) #prüfen ob Berlin enthalten ist
      {
      out "alles palletti";
      }else
      {
      out "leider nein";
      }
      

      sub test
      {
      my $holen=$_[0];
      get "Stadt==$holen";
      if ($amount)
      {
      return 1;
      }else
      {
      return 0;
      }
      }
      

      Hoffentlich wars das, was du nicht verstanden hast.

      Sander


    Ihre Antwort:

    Name: EMail: EMail bei Antwort? WWW:
    Titel:
    Text:

    Neuer Eintrag


 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Ruben (403 Beiträge) am Freitag, 12.Oktober.2001, 10:20.
    @"Perler" - Sub2 in Sub1 aufrufen - Fehler wenn Sub2 nach Sub1 steht??????

      Hallo,
      wenn ich in einer Sub2, die "nur" die html-Ausgabe macht, eine weitere Sub1 aufrufe (ebenfalls "nur" html-Ausgabe) geht das nur, wenn die Sub1 im Script vor Sub2 steht, ansonsten kommt Fehlermeldung "sub1 nicht deklariert"
      Ist das ok so? Sollte Perl nicht eigentlich das gesamte Script durchsuchen, ob da "irgendwo" noch was steht?
      Danke für Infos dazu
      Ruben

     Antworten

    Beitrag von Sander (8133 Beiträge) am Freitag, 12.Oktober.2001, 14:42.
    Re: @"Perler" - Sub2 in Sub1 aufrufen - Fehler wenn Sub2 nach Sub1 steht??????

      Du kannst die subs gleich zu anfang deklarieren - dann sollte sie überall gefunden werden.

      <perl>
      

      sub erste; sub zweite; # unterroutinen vordefinieren, damit sie im programm wie befehle benutzen werden können
      ### Aufruf ### 
      

      erste Param1,param2,param..;

      sub zweite
      {
      my ($var,$var2,..)=@_;
      
      ...
      }

      sub erste
      {
      my ($var,$var2,..)=@_;
      #aufruf der zweiten
      
      zweite param1,param2...;
      }
      </perl>
      

      Sander

     Antworten

    Beitrag von Ruben (403 Beiträge) am Freitag, 12.Oktober.2001, 15:35.
    Re: @"Perler" - Sub2 in Sub1 aufrufen - Fehler wenn Sub2 nach Sub1 steht??????

      Hallo, Sander
      Schön, dich zu sehen. :-)
      Mhm, klingt eigentlich ganz logisch, ist ja in anderen Sprachen auch so *michandenkopfschlag*.
      Danke für den Tip, ich check das dann mal.
      CU
      Ruben

     Antworten

    Beitrag von Ruben (403 Beiträge) am Sonntag, 14.Oktober.2001, 16:27.
    Re: @"Perler" - Sub2 in Sub1 aufrufen - Fehler wenn Sub2 nach Sub1 steht??????

      Volltreffer, danke Sander.
      Hatte zwar zunächst das Prob, daß ich einige Perl-Templates include und bei der Sub-Definition im Hauptscript logischerweise ne Fehlermeldung bekam.
      Aber klaro, erste Zeile nach <perl> subs definieren und das script ist "perfekt".
      CU
      Ruben

     Antworten

    Beitrag von Sander (8133 Beiträge) am Sonntag, 14.Oktober.2001, 21:59.
    Re: @"Perler" - Sub2 in Sub1 aufrufen - Fehler wenn Sub2 nach Sub1 steht??????

      ich dachte zwar auch, das ist ein Vorteil von perl das die subs stehen können wo ich will, aber naja - manchmal wohl nicht ;-)

      Sander

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 15.Oktober.2001, 14:05.
    Re: @"Perler" - Sub2 in Sub1 aufrufen - Fehler wenn Sub2 nach Sub1 steht??????

      Kommt drauf an wie Du sie benutzt:

      meinesub $param;

      oder

      &meinsub($param);
      

      im ersten Fall muss die Sub VOR dem Aufruf definiert sein, im zweiten Fall (mit dem & davor) ist es egal. Das ist deshalb so, weil "meinesub" ja alles mögliche sein könnte: Ein einfacher Text, ein Perl-Befehl, ein sub-Aufruf, ein Fehler ;-)

     Antworten

    Beitrag von Ruben (403 Beiträge) am Montag, 15.Oktober.2001, 17:34.
    Re: @"Perler" - nochmal Problem

      War Quatsch mit dem Definieren am Anfang, meinte deklarieren (Fremdwörter sind manchmal eben doch Glückssache).
      Wenn die subs am Afang deklariert werden, können sie dann definiert werden wo man will.
      Ich rufe sie eigentlich immer mit &subroutine(paras)auf.(Die Parameter sind aber oft auch nicht notwendig, irgendwoher kennt die sub alle im Hauptscript stehenden var-inhalte und kann damit arbeiten. (puhhh - passiert aber auch manchmal zeugs damit, was man gar nicht will)
      Klar ist mir nur noch nicht so richtig die Sache mit den Rückgabewerten.
      Wenn in der sub steht:
      sub test
      {
      out "das ist ein Test";
      }
      
      gibt er es richtig aus, auch an der Stelle wo die Sub aufgerufen wird.
      Wenn drin steht:
      sub test
      {
      $test = "das ist ein Test";
      }
      
      belegt er die var test wie erwartet, allerdings halt "global" fürs ganze script
      Wenn drin steht
      sub test
      {
      my $test = "das ist ein Test";
      }
      
      passiert nix, wie erwartet
      bei
      sub test
      {
      my $test = "das ist ein Test";
      return ($test)
      }
      
      wird aber test auch nicht zurückgegeben (?)
      hingegen bei
      sub test
      {
      my $test = "das ist ein Test";
      $testa = $test;
      return ($testa)
      }
      gibt er testa zurück - nur ist halt dann das testa ab dem Zeitpunkt im Hauptscript mit dem Wert aus der Sub belegt bis der Inhalt der var testa irgendwo wieder manipuliert wird, das gleiche passiert aber auch ohne return
      
      Wie jetzt nun richtig einwtzen?
      Axo - ist nach dem return ein ";" notwendig? (geht offensichtlich auch ohne)

      Und dann steht da noch das Prob mit dem Aufruf ner Sub in einem EOF-Block - habs nicht hingekriegt mit dem Vorschlag von Christoph.
      Ich wollte in nem EOF-Block einen variablen String, den ne sub generiert, mit ausgeben (Block ohne Unterbrechung), ungefähr so:
      out<<EOF;
      <table>
      <tr><td colspan=3>Hier steht was drin</td></tr>
      ${&trennzeile(cs, h, f)}#cs,h,f mit Werten belegt bzw. vars
      <tr><td colspan=3>Hier steht was andres drin</td></tr>
      </table>
      EOF
      und hier die sub:
      sub trennzeile
      {my $colspan=$_[0];my $hoehe=$_[1];my $farbe=$_[2];
      my $tz = <tr><td colspan=$colspan bgcolor=$farbe><img src=$pix heigth=$heohe></td></tr>;
      return ($tz)
      }
      kriegs einfach nicht hin. Ist ja auch zusätzlich ein Prob, daß trennzeile() im aufrufenden Teil ständig andere Werte übergibt, je nach Layout, und die var $tz irgendwie in ihrer Gültigkeit nur "einmalig" sein sollte.
      
      Danke für Hilfe im Voraus
      Ruben

     Antworten

    Beitrag von Sander (8133 Beiträge) am Montag, 15.Oktober.2001, 18:05.
    Re: @"Perler" - nochmal Problem

      >> 
      sub test
      {
      my $test = "das ist ein Test";
      return ($test)
      }
      
      wird aber test auch nicht zurückgegeben (?)
      >>

      Wenn du diese sub mit
      $testa=&test; aufrufst, hast du den zurückgegebenen Wert in $test drin.
      
      oder mit
      out &test;
      wird der Inhalt von $test am zeitpunkt des returns ausgegeben.
      Das hat den Vorteil, das du auch 2 Austiegsbedingungen basteln kannst:

      if (&test("Berlin")) #prüfen ob Berlin enthalten ist
      {
      out "alles palletti";
      }else
      {
      out "leider nein";
      }
      

      sub test
      {
      my $holen=$_[0];
      get "Stadt==$holen";
      if ($amount)
      {
      return 1;
      }else
      {
      return 0;
      }
      }
      

      Hoffentlich wars das, was du nicht verstanden hast.

      Sander

     Antworten

    Beitrag von Ruben (403 Beiträge) am Montag, 15.Oktober.2001, 18:31.
    Re: @"Perler" - nochmal Problem

      Danke, wieder etwas gelernt :-), bringt mich erst mal weiter (und gleich mehr als ich dachte).
      Mit der Sache im EOF-Block haste auch keine Idee?
      CU
      Ruben

     Antworten

    Beitrag von Sander (8133 Beiträge) am Montag, 15.Oktober.2001, 19:02.
    Re: @"Perler" - nochmal Problem

      tja, dazu kann ich nix weiter sagen. Ich könnte mir durch die zusammenhänge nur vorstellen, das die Var ${&trennzeile(cs, h, f)} im EOF- Block nach dem durchlaufen der sub $<tr><td colspan=... bgcolor=$...><img src=$... heigth=$...></td></tr> lauten würde, weil:
      $blubb="hallo";
      $bla="blubb";
      out ${$bla} würde den inhalt von $blubb - also "hallo" ausgeben. 
      
      Ich weiß nicht ob ich richtig liege - müsste CB klären.

      Sander

     Antworten

    Beitrag von Ruben (403 Beiträge) am Montag, 15.Oktober.2001, 20:30.
    Re: @"Perler" - nochmal Problem

      Mhm, machter aber auch nich so, is einfach nicht da in der Ausgabe, so als wäre nichts passiert. Wenn ich mir die debug-Var anzeigen lasse (in der sub einfach mal belegt mit $dbg.="SUB tz aufgerufen" und am ende vom Hauptscript mit out $dbg anzeigen lasse) kommt die Ausgabe sovielemal, wie die sub aufgerufen wird, aber es gibt weder ne Fehlermeldung noch wird im html-code diese Tabellenzeile eingefügt - es läuft einfach ins leere ;-(
      Na mal sehn, vielleicht ist das ja ein Prob für Christoph was ihn "reizt" :-))

     Antworten

    Beitrag von Sander (8133 Beiträge) am Montag, 15.Oktober.2001, 20:41.
    Re: @"Perler" - nochmal Problem

      jo, das meine ich ja damit. Du bastelst dir ne Variable mit dem Namen (nicht wert) $<tr><td colspan=... bgcolor=...><img src=... heigth=...></td></tr> - Diese gibts aber gar nicht also ist sie leer.
      Warum unterbrichst du nicht einfach EOF? ;-)

      Sander

     Antworten

    Beitrag von Ruben (403 Beiträge) am Montag, 15.Oktober.2001, 21:22.
    Re: @"Perler" - nochmal Problem

      jepp, ist wohl die einfachste Variante. Hab halt immer im Editor dann keinen richtigen Durchblick mehr, weil die End-EOF's ja immer am Anfang der Zeile stehen. Und bei verschachtelten Tabs wird da schnell alles unübersichtlich, is aber besser als jeztz hier stundenlang zu basteln wegen so nem mehr "kosmetischen" Problem.
      Noch was, gibts ne Systemvariable fürs aktuelle Verzeichnis, in dem das jeweilige Template steht? (halt sowas wie $_htx oder $_link - ich brauchs aber ohne den Template-Namen, den will ich erst anhängen (zur Verwendung in h-refs, damit von einem Template ein anderes einfach verlinkt werden kann und nicht der absolute Pfad eingetragen werden muß - da fällt dann die Anpassung auf anderen Accounts komplett bei den Links weg.
      Danke
      Ruben

     Antworten

    Beitrag von Sander (8133 Beiträge) am Montag, 15.Oktober.2001, 22:20.
    Re: @"Perler" - nochmal Problem

      Mit Regex hab ich es nicht hinbekommen, aber so gehts auch ;-)

      @Dir=split/\//,$htx;
      pop @Dir;
      $dir.=$_."/" foreach(@Dir);
      chop $dir;    #wenn am Schluss ein / stehen soll, diese Zeile löschen 
      out $dir;
      

      Sander

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 15.Oktober.2001, 23:23.
    Re: @"Perler" - nochmal Problem

      $dir=substr($htx, rindex($htx, "/")-1);
      

      oder

      ($dir)=$htx=~ m#(.*)/[^/]*$#;

      nich getestet ;-)

     Antworten

    Beitrag von Ruben (403 Beiträge) am Dienstag, 16.Oktober.2001, 09:33.
    Re: @"Perler" ... Teplatedir im Link - noch etwas anders

      Hallo,
      stimmte nicht ganz, mit dem substr-construkt, brauch ja den pfad in dem das template liegt ohne den templatename.
      Habs so hingekriegt:
      $dir=substr($htx,1,rindex($htx, "/"));
      und dann <a href=="http://www.baseportal.de/cgi-bin/baseportal.pl?htx=$dir/anderestemplate>Anderes anzeigen</a>
      
      Danke trotzdem, war der richtige Ansatz zum umsetzen.

     Antworten

    Beitrag von Ruben (403 Beiträge) am Dienstag, 16.Oktober.2001, 09:36.
    Re: @"Perler"...sorry, falsches reinkopiert

      muß natürlich richtig heißen:
      $dir=substr($htx,0,rindex($htx, "/")); #Verzeichnispfad des Templates
      

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 15.Oktober.2001, 23:34.
    Re: @"Perler" - nochmal Problem - aufruf sub in <<...

      hat ja auch nich gestimmt ;-) so muss es aussehen: (tested ;-) ):

      out <<EOF;
      Jaja, ${\( &bla() )} gibts...
      EOF
      

      sub bla { return "Sachen"; }


      sieht wüst aus, isses auch, vielleicht die bessere möglichkeit wäre, die ausgabe der sub einfach in einer variablen zu speichern:

      $x=&bla();
      out <<EOF;
      
      blabla
      $x
      blubber...
      EOF
      

     Antworten

    Beitrag von Ruben (403 Beiträge) am Dienstag, 16.Oktober.2001, 07:03.
    Re: @"Perler" - nochmal Problem - aufruf sub in <<...

      Schön, ich hatte den jetzt von dir vorgeschlagenen Konstrukt gestern abend auch im Perl-Kochbuch gefunden (Rezept 1.10 Interpolation....). So richtig verstehen tu ichs nich, aber mal sehn, obs tut.
      Danke

     Antworten

    Beitrag von Ruben (403 Beiträge) am Dienstag, 16.Oktober.2001, 07:19.
    Re: @"Perler" - nochmal Problem - aufruf sub in <<...

      sorry, hatte glatt übersehn, daß ihr ja auch ne Lösung für ne Varbelegung fürs htx-dir gepostet habt. Danke an Sander und Christoph, ich check das jetzt alles mal durch.
      Macht richtig Spaß, hier zu basteln - für jede "Korkenzieheridee" wird glatt n Lösungsansatz oder gleich ne ganze Lösung geschickt - das fetzt :-))

     Antworten


     
 Liste der Einträge von 55801 bis 55951: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!